首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GTK-rs Builder::get_object的这种行为有多安全?

GTK-rs Builder::get_object的这种行为有多安全?
EN

Stack Overflow用户
提问于 2017-05-15 20:37:29
回答 1查看 291关注 0票数 2

https://doc.rust-lang.org/book/ownership.html#move-semantics中,它是这样写的:

移动语义 不过,这里还有一些更微妙的地方:生锈确保任何给定的资源都有一个绑定。例如,如果我们有一个向量,我们可以将它分配给另一个绑定:

但是我发现我可以使用gtk-rs来完成这个任务:

代码语言:javascript
复制
let label1: gtk::Label = builder.get_object("label1").unwrap();
let label1_test: gtk::Label = builder.get_object("label1").unwrap();

现在两者都指向相同的资源“或发生在我身上的事情。

Builder::get_object被定义为:

代码语言:javascript
复制
pub fn get_object<T: IsA<Object>>(&self, name: &str) -> Option<T> {
    unsafe {
        Option::<Object>::from_glib_none(
            ffi::gtk_builder_get_object(self.to_glib_none().0, name.to_glib_none().0))
            .and_then(|obj| obj.downcast().ok())
    }
}

虽然这并不是直接来自铁锈的东西,只是来自gtk-rs,但我想知道我是否正确,这有多确定。

也许它可以用Rc

EN

回答 1

Stack Overflow用户

发布于 2017-09-06 09:02:54

GTK/GLib对象(GObject)直接实现引用计数,类似于Rust中的圆弧类型。您可以安全地拥有对同一个对象的多个引用,一旦最后一个引用超出范围,该对象将被销毁。

对于易变性,在锈蚀中,gtk-rs使用内部可变(概念上)。因此,您可以对同一个对象的每个引用进行变异,即使其中存在多个引用。对象的实现必须处理这个问题(无论如何,这是因为C中的GTK/GLib就是这样的)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43988417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档