获取对存储在GHashTable中的密钥的引用
我正在使用glib中的GHashTable,我想通过密钥删除密钥值对。如调用g_hash_table_remove()
时docs中所述,您需要释放密钥并在动态分配时自己评估。但是,如何获得指向密钥的指针,以便我可以释放它?获取对存储在GHashTable中的密钥的引用
编辑:我认为使用g_hash_table_new_full
但我使用GHashTable是如此之小以至于我认为这种矫枉过正。我宁愿手动释放密钥。
编辑:正如Keine Lust g_hash_table_new_full
指出的那样不应该低性能。如果你不需要它,你还可以通过NULL
获得其中一个销毁函数。
一个简单方法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时,如果你 不希望提供这样的功能使用的 值的内存。
我考虑过使用'g_hash_table_new_full',但是我对GHashTable的使用太小了,以至于我认为这是过度的。我宁愿手动释放密钥。 – timakro
不要担心,使用'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 –
感谢说清楚,那么我会很乐意去用'g_hash_table_new_full'。 – timakro
请给出downvoting的原因,谢谢。 – timakro