C GTK中的自由对象/小部件?
我的GTK应用程序中有一个包装盒,我每隔一段时间就会用一个全新的条目替换它(至少现在是因为我很忙) 因为我要用一个新实例替换它,所以我是否需要显式地从内存中释放旧的包装盒内容,或者GTK中是否存在一些垃圾收集 如果我确实需要显式地释放该对象,是否有一个命令会递归地转到该树中的所有对象(例如,它会清除我的主包装盒中的盒子容器中的我的按钮)?还有,连接到对象的信号和处理程序呢C GTK中的自由对象/小部件?,c,gtk,C,Gtk,我的GTK应用程序中有一个包装盒,我每隔一段时间就会用一个全新的条目替换它(至少现在是因为我很忙) 因为我要用一个新实例替换它,所以我是否需要显式地从内存中释放旧的包装盒内容,或者GTK中是否存在一些垃圾收集 如果我确实需要显式地释放该对象,是否有一个命令会递归地转到该树中的所有对象(例如,它会清除我的主包装盒中的盒子容器中的我的按钮)?还有,连接到对象的信号和处理程序呢 我使用的是C/GTK-2.0(gcc v4.4.3和GTK 2.20.0)。g对象是引用计数的。当您将小部件打包到容器中时,
我使用的是C/GTK-2.0(gcc v4.4.3和GTK 2.20.0)。g对象是引用计数的。当您将小部件打包到容器中时,容器将接管所有权 当您执行
gtk_container_remove()
时,容器持有的引用将被删除,这通常会导致小部件被销毁
因此,不需要显式地销毁它,只需从容器中删除它就足够了
gtk_container_remove()
API的示例还指出,直接在孩子身上调用gtk_widget_destroy()
会更有效,因此,如果这是您已经在做的事情,那么您就没事了。此外,当您销毁容器小部件时,它会释放对其中所有小部件的引用,这通常会导致它们也被销毁,所以是的,它是递归的。