免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11386 | 回复: 2
打印 上一主题 下一主题

请教有关g_object_unref的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-22 15:29 |只看该作者 |倒序浏览
大家好。我初学GTK+编程,有点问题想请教一下。
我刚刚看了glib里有关g_object_unref的介绍,是减少object引用数。这个一般可以用在什么情况下呢?是销毁控件吗?

调用它与gtk_widget_destory有什么区别,该如何区分使用?

谢谢!

论坛徽章:
0
2 [报告]
发表于 2007-10-23 22:16 |只看该作者
就像 C 语言中的 malloc() 和 free() 成对使用一样,一般 g_object_ref() 和 g_object_unref() 成对使用,用于增加或减少引用计数。减少引用计数到 0 的话,将引起一系列的善后工作,随后 object 即被销毁。

g_object_ref() 只是简单地减少一次引用计数;gtk_widget_destory() 除了减少一次引用计数之外,还同时向这个对象的拥有者发送"destroy"信号,告诉它们需要释放这个对象。

这样,这两个函数的区别也就很明显了:如果一个对象有一个拥有者(拥有者负责释放此对象),g_object_ref() 可以释放此对象,但是它的拥有者却不知道此对象被删除了;当拥有者对象本身被删除的时候,它仍然试图去删除已经不存在的那个子对象,而这就会导致出现问题。用 gtk_widget_destory() 删除一个有拥有者的对象不会出现上述问题,因为它已经通知了其拥有者,而拥有者对象已经作了相应的处理。

论坛徽章:
0
3 [报告]
发表于 2007-10-24 21:21 |只看该作者
原来如此!明白了不少。
非常感谢whyglinux的解说。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP