2017-08-12 18 views
1

私はglibからGHashTableを使用しています。キーでキー値のペアを削除したいと思います。 docsに記載されているように、g_hash_table_remove()を呼び出すときは、動的に割り当てられたときにキーと値を解放する必要があります。しかし、私はそれを解放することができるように私はどのようにキーへのポインタを取得するのですか?GHashTableに格納されたキーへの参照を取得する

編集:私はg_hash_table_new_fullを使用すると考えましたが、私のGHashTableの使用は私がこの過度な考えをするほど小さいです。私は手動でキーを解放する方が好きです。

編集:Keine Lustによって指摘されているように、g_hash_table_new_fullはパフォーマンスが低下してはいけません。破棄関数の1つにNULLを渡すこともできます。

+0

ありがとうございます。ありがとうございます。 – 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:平等のための2つのキーをチェックする機能

key_destroy_func:あなたは はしたくない場合はGHashTableからエントリ、またはNULLを削除するときに使用するキー に割り当てられたメモリを解放する機能そのような機能を提供する。

value_destroy_func:機能あなたは、このような機能を提供したくない場合は GHashTableからエントリを削除するときに使用 値のために割り当てられたメモリ、またはNULLを解放します。

+0

私は 'g_hash_table_new_full'を使うと考えましたが、私のGHashTableの使用は小さすぎるので、私はこの過剰を考えました。私は手動でキーを解放する方が好きです。 – timakro

+0

'g_hash_table_new_full'を使用しても残念ですが、基本構造体に' hash_table-> key_destroy_func'と 'hash_table-> value_destroy_func'という2つのメンバを埋め込むだけです。' 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

関連する問題