我正在C
编写一个程序,并使用Gtk+
作为GUI。一切正常,但我对可能的内存泄漏有疑问。
我需要显示元素列表,然后通过搜索栏和按钮过滤此列表。我想使用GtkTreeView
和GtkListStore
,如example所述。
执行过滤时,我只需创建一个新的GtkListStore
并用新元素填充它,然后在GtkTreeView
中设置新模型。
我是否需要释放我不再使用的模型或Gtk+
会自动处理它?</ strong>
答案 0 :(得分:1)
断言你使用gtk_tree_view_set_model
交换模型。
的DocBook gtk_tree_view_set_model()
void gtk_tree_view_set_model (GtkTreeView *tree_view,
GtkTreeModel *model);
设置GtkTreeView的模型。如果tree_view已经有模型 设置,它将在设置新模型之前将其删除。如果model为NULL, 然后它将取消旧模型。
所以这意味着如果一个模型与视图相关联,它的引用计数器将减少一个(我实际上通过查看源代码来证实,文档在这里不够明确&#34;删除&#34;装置))。
如果你按照例子说的那样处理它
/* 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_object_ref
或其他一些会添加引用的方法,否则您无需另外执行。
我强烈建议您获取devhelp并安装Gtk+
个docbook条目。