这是我第一次使用GTK。我有以下代码,我想知道它是否泄漏内存。它位于每次右键单击时调用的函数内。
GtkWidget *menu = gtk_menu_new();
//while loop adding a bunch of menu items
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
gtk_widget_show_all(menu);
gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->button.time);
GTK是否自动处理清洁工作?
答案 0 :(得分:4)
GtkMenu
是GtkWidget
的子类,而GInitiallyUnowned
的子类又是GtkWindow
的子类。因此它具有所有浮动参考魔法。
当你弹出一个菜单时,它就像g_object_ref_sink(menu); //ref = 1
g_menu_popup(...);
g_print("I am %s\n", menu->ref_count==1? "right" : "wrong");
g_object_unref(menu);
一样工作,所以它会自动反射浮动引用,最后,当菜单被取消时,它会被取消引用并被释放。
简短回答:是的,它是自动的,所以你的代码是正确的。
您可以使用此代码检查我是否正确:
ref_count
注意:除了调试之外,不要使用GObject
。它应该被视为{{1}}的实现细节,永远不能直接访问。