2017-08-12 25 views
1

我正在使用glib中的GHashTable,我想通过密钥删除密钥值对。如调用g_hash_table_remove()docs中所述,您需要释放密钥并在动态分配时自己评估。但是,如何获得指向密钥的指针,以便我可以释放它?获取对存储在GHashTable中的密钥的引用

编辑:我认为使用g_hash_table_new_full但我使用GHashTable是如此之小以至于我认为这种矫枉过正。我宁愿手动释放密钥。

编辑:正如Keine Lust g_hash_table_new_full指出的那样不应该低性能。如果你不需要它,你还可以通过NULL获得其中一个销毁函数。

+0

请给出downvoting的原因,谢谢。 – timakro

回答

2

一个简单方法free相关联的数据时的条目在哈希表中被删除正在传递free函数g_hash_table_new_full

GHashTable = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); 

参数

hash_func:一个函数来创建一个密钥的哈希值

key_equal_func:检查平等的两个按键的功能

key_destroy_func:释放分配去除从GHashTable进入,或NULL时使用的键 如果不 想要的记忆功能提供这样的功能。

value_destroy_func:一个函数来释放分配给除从GHashTable进入,或NULL时,如果你 不希望提供这样的功能使用的 值的内存。

+0

我考虑过使用'g_hash_table_new_full',但是我对GHashTable的使用太小了,以至于我认为这是过度的。我宁愿手动释放密钥。 – timakro

+0

不要担心,使用'g_hash_table_new_full'没有任何矫枉过正的情况,它只是在基本结构中填充2个成员:'hash_table-> key_destroy_func'和'hash_table-> value_destroy_func',实际上'g_hash_table_new'被实现为'返回g_hash_table_new_full(hash_func,key_equal_func,NULL,NULL);',在幕后,看看实现:https://git.gnome.org//browse/glib/tree/glib/ghash.c –

+1

感谢说清楚,那么我会很乐意去用'g_hash_table_new_full'。 – timakro