Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C GTK中的自由对象/小部件?_C_Gtk - Fatal编程技术网

C GTK中的自由对象/小部件?

C GTK中的自由对象/小部件?,c,gtk,C,Gtk,我的GTK应用程序中有一个包装盒,我每隔一段时间就会用一个全新的条目替换它(至少现在是因为我很忙) 因为我要用一个新实例替换它,所以我是否需要显式地从内存中释放旧的包装盒内容,或者GTK中是否存在一些垃圾收集 如果我确实需要显式地释放该对象,是否有一个命令会递归地转到该树中的所有对象(例如,它会清除我的主包装盒中的盒子容器中的我的按钮)?还有,连接到对象的信号和处理程序呢 我使用的是C/GTK-2.0(gcc v4.4.3和GTK 2.20.0)。g对象是引用计数的。当您将小部件打包到容器中时,

我的GTK应用程序中有一个包装盒,我每隔一段时间就会用一个全新的条目替换它(至少现在是因为我很忙)

因为我要用一个新实例替换它,所以我是否需要显式地从内存中释放旧的包装盒内容,或者GTK中是否存在一些垃圾收集

如果我确实需要显式地释放该对象,是否有一个命令会递归地转到该树中的所有对象(例如,它会清除我的主包装盒中的盒子容器中的我的按钮)?还有,连接到对象的信号和处理程序呢


我使用的是C/GTK-2.0(gcc v4.4.3和GTK 2.20.0)。

g对象是引用计数的。当您将小部件打包到容器中时,容器将接管所有权

当您执行
gtk_container_remove()
时,容器持有的引用将被删除,这通常会导致小部件被销毁

因此,不需要显式地销毁它,只需从容器中删除它就足够了


gtk_container_remove()
API的示例还指出,直接在孩子身上调用
gtk_widget_destroy()
会更有效,因此,如果这是您已经在做的事情,那么您就没事了。

此外,当您销毁容器小部件时,它会释放对其中所有小部件的引用,这通常会导致它们也被销毁,所以是的,它是递归的。