例如: 我创建并填充字符串这样的结构:
GtkTreeStore *store = gtk_tree_store_new(1, G_TYPE_STRING);
然后在代码中的某个地方调用
g_object_unref(store);
之后,store
中存储的字符串是否会被释放?如果没有,如何从GtkTreeStore
或GtkTreeModel
正确释放内存?
文档对此一无所知。 (或者我找不到信息:P)
答案 0 :(得分:2)
它不明确,但文档仍然非常明确:请参阅gtk_tree_store_set():
如果商店是G_TYPE_OBJECT,商店会引用该值, 如果它是G_TYPE_STRING或G_TYPE_BOXED,它将被复制。
所以GtkTreeStore会做自己的内存管理。实际上,只要您使用它调用gtk_tree_store_set*()
(或gtk_tree_store_insert_with_values*()
),就可以释放字符串:此时树存储已经创建了字符串的副本。