GTK+ 如何处理指针?
How does GTK+ deal with pointers?
所以我正在用 C++ 在 GTK+ 中编写一个应用程序(我可能应该使用 GTKmm,但我没有)并且使用 GTK+ 所有小部件和指针,这不是很理想,但它不是'不会让编程变得更加困难。但是,当 window 关闭时,这些指针会发生什么变化? GTK+ 是否拉取 Java 并垃圾收集所有指向 gpointers 的指针?如果没有,我如何访问 GTK+ 用来关闭 window 的方法和自己删除指针的程序?
如果你查看文档,你会发现 Gtk 指针都是从 gobjects 派生的。请参阅 g_object_ref
和 g_object_unref
上的文档,但基本上,它们会计算持有的副本数。如果 g_object_unref
导致使用计数为零,则该对象将被自动删除。
正在创建 window returns 对象。告诉它关闭将删除显示的位,但调用 g_object_unref
将删除它和所有嵌入的对象。当然,除非有它的另一个副本,在这种情况下它将一直存在,直到再次调用 uref()
。
请阅读 GTK+ 3 的第 1.4 ("How does memory management work in GTK+? Should I free data returned from functions? ") 和 1.5 ("Why does my program leak memory, if I destroy a widget immediately after creating it ?") common questions.
GTK 使用引用计数器来了解何时需要销毁 GObject-derived 对象(与所有小部件一样)。例如,以这种方式销毁顶层 window 会销毁它包含的所有小部件。
所以我正在用 C++ 在 GTK+ 中编写一个应用程序(我可能应该使用 GTKmm,但我没有)并且使用 GTK+ 所有小部件和指针,这不是很理想,但它不是'不会让编程变得更加困难。但是,当 window 关闭时,这些指针会发生什么变化? GTK+ 是否拉取 Java 并垃圾收集所有指向 gpointers 的指针?如果没有,我如何访问 GTK+ 用来关闭 window 的方法和自己删除指针的程序?
如果你查看文档,你会发现 Gtk 指针都是从 gobjects 派生的。请参阅 g_object_ref
和 g_object_unref
上的文档,但基本上,它们会计算持有的副本数。如果 g_object_unref
导致使用计数为零,则该对象将被自动删除。
正在创建 window returns 对象。告诉它关闭将删除显示的位,但调用 g_object_unref
将删除它和所有嵌入的对象。当然,除非有它的另一个副本,在这种情况下它将一直存在,直到再次调用 uref()
。
请阅读 GTK+ 3 的第 1.4 ("How does memory management work in GTK+? Should I free data returned from functions? ") 和 1.5 ("Why does my program leak memory, if I destroy a widget immediately after creating it ?") common questions.
GTK 使用引用计数器来了解何时需要销毁 GObject-derived 对象(与所有小部件一样)。例如,以这种方式销毁顶层 window 会销毁它包含的所有小部件。