|
发表于 2009-9-7 13:39:29
|
显示全部楼层
gtk 中 widget 都是基于 gobject 的, 它们会持有一个引用计数, 降至 0 时自动被释放.
新创建的其计数为 1, 加入某个容器不会改变其计数, 而从容器 remove 时计数会减 1, 这样一般不加额外处理的情况下就会被释放.
一个 widget 被 destroy 时可认为它会将所有的 children 都先 remove 掉, 再释放自己, 这样 children 的情况可参考上面的说明
顶级窗口会持有对 gtk 的一个引用计数, 当顶级窗口关闭 (destroy) 时计数减 1. 当 gtk 的引用减至 0 时, 等效于 gtk_main_quit()
gtk_main_quit() 的情况我不太确定, 它应该是执行以下的一条路径 (所有的 gobject / 所有的 widget / 所有的顶级窗口) (发送 destroy 事件 / 引用计数减 1), 但是具体是哪一个我不清楚, 谁来明确一下? 不过印象中 gtk_main_quit() 后所有已创建的 widget 就失效了, 即使手动增加过它们的计数. 这样很有可能是所有已创建的 widget 都被 destroy 了. |
|