GTK+如何处理指针? 我在C++中用GTK+编程一个应用程序,我应该使用GTKMM,但是我不使用GTK+所有的小部件,这是指针,这不是很理想,但是它并不能使编程变得更加困难。但是,当窗口关闭时,这些指针会发生什么情况?GTK+是否拉入Java并垃圾收集所有指向gpointers的指针?如果没有,我如何访问GTK+用来关闭窗口的方法以及自己删除指针的程序?

GTK+如何处理指针? 我在C++中用GTK+编程一个应用程序,我应该使用GTKMM,但是我不使用GTK+所有的小部件,这是指针,这不是很理想,但是它并不能使编程变得更加困难。但是,当窗口关闭时,这些指针会发生什么情况?GTK+是否拉入Java并垃圾收集所有指向gpointers的指针?如果没有,我如何访问GTK+用来关闭窗口的方法以及自己删除指针的程序?,c++,pointers,memory-management,gtk,C++,Pointers,Memory Management,Gtk,如果您查看文档,您将看到GTK指针都是从gobjects派生的。查阅有关g_object_ref和g_object_unref的文档,但是,基本上,它们会记录保存了多少份副本。如果g_object_unref导致使用计数为零,则会自动删除该对象 创建窗口将返回一个对象。告诉它关闭将删除显示的位,但调用g_object_unref将删除它和所有嵌入的对象。当然,除非有它的另一个副本,在这种情况下,它将一直存在,直到再次调用uref。如果您查看文档,您将看到Gtk指针都是从GObject派生的。查阅

如果您查看文档,您将看到GTK指针都是从gobjects派生的。查阅有关g_object_ref和g_object_unref的文档,但是,基本上,它们会记录保存了多少份副本。如果g_object_unref导致使用计数为零,则会自动删除该对象


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

如果您查看文档,您将看到Gtk指针都是从GObject派生的。查阅有关g_object_ref和g_object_unref的文档,但是,基本上,它们会记录保存了多少份副本。如果g_object_unref导致使用计数为零,则会自动删除该对象


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

请阅读第1.4点GTK+中内存管理是如何工作的?我应该释放从函数返回的数据吗?1.5如果我在创建一个小部件后立即销毁它,为什么我的程序会泄漏内存?在GTK+3中


GTK使用一个引用计数器来知道何时需要销毁GObject派生的对象,如所有小部件。例如,通过这种方式,销毁顶级窗口会销毁它包含的所有小部件。

请阅读第1.4点GTK+中的内存管理是如何工作的?我应该释放从函数返回的数据吗?1.5如果我在创建一个小部件后立即销毁它,为什么我的程序会泄漏内存?在GTK+3中


GTK使用一个引用计数器来知道何时需要销毁GObject派生的对象,如所有小部件。例如,通过这种方式,销毁顶级窗口会销毁它包含的所有窗口小部件。

那么关闭窗口后是否有必要调用g_object_unref?销毁窗口小部件会释放它。不是这样。例如,如果小部件是从资源加载的对话框,则资源会在下次请求时保留其副本。关闭对话框会破坏窗口,但不会破坏对象。如果有疑问,试试看。如果您尝试释放它太多次,它将抛出一个错误,尽管可能直到程序退出。因此关闭窗口后是否有必要调用g_object_unref?销毁小部件会释放它。不是这样。例如,如果小部件是从资源加载的对话框,则资源会在下次请求时保留其副本。关闭对话框会破坏窗口,但不会破坏对象。如果有疑问,试试看。如果您尝试释放它太多次,它将抛出一个错误,尽管可能直到程序退出。