请教有关g_object_unref的问题
大家好。我初学GTK+编程,有点问题想请教一下。
我刚刚看了glib里有关g_object_unref的介绍,是减少object引用数。这个一般可以用在什么情况下呢?是销毁控件吗?
调用它与gtk_widget_destory有什么区别,该如何区分使用?
谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
原来如此!明白了不少。
非常感谢whyglinux的解说。
就像 C 语言中的 malloc() 和 free() 成对使用一样,一般 g_object_ref() 和 g_object_unref() 成对使用,用于增加或减少引用计数。减少引用计数到 0 的话,将引起一系列的善后工作,随后 object 即被销毁。
g_object_ref() 只是简单地减少一次引用计数;gtk_widget_destory() 除了减少一次引用计数之外,还同时向这个对象的拥有者发送"destroy"信号,告诉它们需要释放这个对象。
这样,这两个函数的区别也就很明显了:如果一个对象有一个拥有者(拥有者负责释放此对象),g_object_ref() 可以释放此对象,但是它的拥有者却不知道此对象被删除了;当拥有者对象本身被删除的时候,它仍然试图去删除已经不存在的那个子对象,而这就会导致出现问题。用 gtk_widget_destory() 删除一个有拥有者的对象不会出现上述问题,因为它已经通知了其拥有者,而拥有者对象已经作了相应的处理。