我需要在GTK中释放弹出菜单吗?

时间:2014-02-12 18:05:50

标签: c gtk

这是我第一次使用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是否自动处理清洁工作?

1 个答案:

答案 0 :(得分:4)

如您的代码所示,

GtkMenuGtkWidget的子类,而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}}的实现细节,永远不能直接访问。