2017-08-12 50 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