GTK +如何处理指针?

时间:2017-02-10 21:59:43

标签: c++ pointers memory-management gtk

所以我用C ++编写GTK +中的应用程序(我应该使用GTKmm,但我不是),而且使用GTK +所有小部件,这些指针并不是非常理想的指针,但它并没有让编程变得更加困难。但是,当窗口关闭时,那些指针会发生什么? GTK +拉Java和垃圾收集所有指向gpointers的指针吗?如果它没有,我如何访问GTK +关闭窗口所使用的方法以及自己删除指针的程序?

2 个答案:

答案 0 :(得分:2)

如果查看文档,您会看到Gtk指针都来自gobjects。请参阅g_object_ref和g_object_unref上的文档,但基本上,它们会计算持有的副本数。如果g_object_unref导致使用次数为零,则会自动删除该对象。

创建窗口返回一个对象。告诉它关闭将删除显示的位,但调用g_object_unref将删除它和所有嵌入的对象。当然,除非有另一个副本,否则它将一直存在,直到再次调用uref()为止。

答案 1 :(得分:1)

请阅读第1.4点(“内存管理如何在GTK +中工作?我应该从函数中返回数据吗?”)和1.5(“为什么我的程序会泄漏内存,如果我在创建后立即销毁它?”) GTK + 3 common questions

GTK使用引用计数器来了解何时需要销毁GObject派生对象(如所有小部件)。这样,例如,销毁顶级窗口会破坏它包含的所有小部件。