我想在我的代碼中使用GHashTable
。我將使用int
作爲我的鑰匙和結構作爲我的價值。我的問題:GLib中GHashTable的用法?
- 我將不得不分配爲我使用的一個關鍵的
int
內存,或者我可以只使用在函數的局部變量插入和查找? g_int_to_pointer
是做什麼用的?- 如果我正在編寫
GDestroyFunction
,我需要釋放任何內存嗎?
我想在我的代碼中使用GHashTable
。我將使用int
作爲我的鑰匙和結構作爲我的價值。我的問題:GLib中GHashTable的用法?
int
內存,或者我可以只使用在函數的局部變量插入和查找?g_int_to_pointer
是做什麼用的?GDestroyFunction
,我需要釋放任何內存嗎?我將不得不分配爲我使用的一個關鍵整型內存,或者我可以只使用在函數的局部變量插入和查找?
不,你可以按值傳遞整數,你不需要在malloc()
之類的堆上分配它。
g_int_to_pointer做什麼?
對不起,我不知道那一個。
如果我正在寫一個GDestroyFunction,我將不得不釋放任何內存嗎?
您的意思是GDestroyNotify?如文檔所述:
指定在銷燬數據元素時調用的函數的類型。它傳遞指向數據元素的指針並釋放爲其分配的內存和資源。
是的,你必須釋放分配的內存。
GINT_TO_POINTER
(介意大寫字母)將32位int
打包到指針的空間中,該指針可能是32位或64位。例如,您可以使用此宏將int
s作爲信號的參數user_data
,同時避免爲它們分配內存。然後在信號處理程序中,使用GPOINTER_TO_INT
將int返回。不要嘗試解除指針的引用!
謝謝你的回答。我正在考慮在使用'GHashTable'時使用int作爲'key'。我可以使用'G_INT_TO_POINTER'將其轉換爲一個指針,以便它可以在[link]中使用(http://developer.gnome.org/glib/stable/glib-Hash-Tables.html#g-hash-table -插)。在從表中檢索時,我可以使用相同的'G_INT_TO_POINTER'宏將int轉換爲所需的指針嗎?他們都將被保證是相同的參考? – jogabonito
@jogabonito:是的。 – ptomato
不,您需要使用'GPOINTER_TO_INT'來獲取原始int,如答案中所述。順便說一句,我試圖解決這個錯誤(在G之後你不需要'_'),但是我抱怨說我的編輯太短了。 –