如何在 C 中释放 GTK 4 小部件?

问题描述 投票:0回答:1

我正在编写一些 C 代码,其中有一个用于构建 GTK 4 小部件的复杂算法,并且由于输入数据的某些组合,其中一些小部件可能最终“无效”。然而,我不能总是事先知道我是如何设计我的应用程序的(并且事先进行“验证”步骤可能比无效小部件的一些额外分配成本更高),所以有时我最终会分配一个容器小部件然后未使用,因为没有可以添加的子项。在这些情况下,如果我确定该小部件无效,我想在函数结束时释放该小部件。我尝试寻找解决方案,并发现了问题 GTK 2 中的免费对象/小部件?,但它适用于 GTK 2,一个答案提到使用

gtk_widget_destroy ()
,它似乎已在 GTK 3 和 GTK 4 之间删除.

那么,如何在 C 中释放 GTK 4 小部件?

c memory-management gtk4
1个回答
0
投票

要在 GTK 中手动释放小部件,您需要使用

g_object_ref_sink ()
获取它的所有权,因为 GtkWidget 实例以“浮动”引用开始。之后,您可以决定是否将其设为父级,然后使用
g_object_unref ()
来降低引用计数并可能释放它。像这样的东西:

// Create the widget.
GtkWidget *widget = some_widget_new ();

// Take ownership, "sink" the floating reference.
g_object_ref_sink (widget);

// Check if widget setup was successful
if (setup_widget (widget))
  // If it was, parent the widget.
  add_child (parent, widget);

// Decrease the refcount
g_object_unref (widget);
© www.soinside.com 2019 - 2024. All rights reserved.