C 设置新型号时是否需要释放GtkListStore?

C 设置新型号时是否需要释放GtkListStore?,c,model,gtk,free,gtk3,C,Model,Gtk,Free,Gtk3,我正在用C编写一个程序,并将Gtk+用于GUI。一切正常,但我对可能的内存泄漏有一些怀疑 我需要显示一个元素列表,然后通过搜索栏和按钮过滤这个列表。我想使用GtkTreeView和GtkListStore,如本文所述 执行过滤时,我只需创建一个新的GtkListStore,并用新元素填充它,然后在GtkTreeView中设置新模型 我是否需要释放我不再使用的那些模型,或者将Gtk+自动处理这些模型?断言您使用Gtk\u tree\u view\u set\u model交换模型 文件簿 gtk树

我正在用
C
编写一个程序,并将
Gtk+
用于GUI。一切正常,但我对可能的内存泄漏有一些怀疑

我需要显示一个元素列表,然后通过搜索栏和按钮过滤这个列表。我想使用
GtkTreeView
GtkListStore
,如本文所述

执行过滤时,我只需创建一个新的
GtkListStore
,并用新元素填充它,然后在
GtkTreeView
中设置新模型


我是否需要释放我不再使用的那些模型,或者将
Gtk+
自动处理这些模型?

断言您使用
Gtk\u tree\u view\u set\u model
交换模型

文件簿 gtk树视图集合模型()

设置GtkTreeView的模型。如果树视图已经有一个模型 设置时,它将在设置新模型之前将其删除。如果模型为空, 然后它将取消旧模式

这意味着,如果一个模型与视图相关联,它的referece计数器将减少1(实际上,我通过查看源代码证明,文档在这里不够明确“删除”的含义)

如果你像例子中说的那样处理它

   /* Create a view */
   tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));

   /* The view now holds a reference.  We can get rid of our own
    * reference */
   g_object_unref (G_OBJECT (store));
除非显式调用
g\u object\u ref
或其他添加引用的方法,否则不需要执行任何其他操作

我强烈建议您获取并安装
Gtk+
docbook条目

   /* Create a view */
   tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));

   /* The view now holds a reference.  We can get rid of our own
    * reference */
   g_object_unref (G_OBJECT (store));