[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][TOP]

Re: g_hash_table_destroy ()の説明に誤訳


 赤星です。

Takeshi AIHANA (HOME) wrote:
> 関数 g_hash_table_new() ではなく、
> 関数 g_hash_table_new_full() が正しいですね。
> 
> ちなみに、同じ引数 (ハッシュ関数とチェック関数) を引き渡すという意味で
> "再度生成する"という語句を使用しています。

 いまいち、ピンと来てないのですが…。これは、原文自体が分かり難い書き方
をしているせいもあると思うのですが、わたし自身は、次の様に理解しています。

 g_hash_table_new()を使って生成したGHashTableをg_hash_table_destroy()で
破棄する場合、動的にメモリ上に確保されたkeyとvalueを先に自分で解放する必
要があります。
 逆にg_hash_table_new_full()を使って生成したGHashTableを
g_hash_table_destory()で破棄した場合は、key_destroy_funcと
value_destroy_funcが呼び出されkeyとvalueが自動で解放されます。

 この解釈が正しいとすれば、"再度生成する"という記述は誤解を招くのではな
いでしょうか。


 ついでに同じページでg_hash_table_insert ()とg_hash_table_replace ()
の違いが分かり難いのですが、原文ではkeyの扱いについて次のような記述の違
いがあるようです。

g_hash_table_insert ():
 ...If you supplied a key_destroy_func when creating the GHashTable, the
passed key is freed using that function.
^^^^^^

g_hash_table_replace ():
 ...If you supplied a key_destroy_func when creating the GHashTable, the
old key is freed using that function.
^^^
 イメージ的には、前者がkeyは元々確保されていた物を利用してvalueのみ置き
換える、後者がkeyとvalueとも置き換えるという役割の様な気がするのですが、
実際の所、keyの扱いがどうなるのかよく分かりません。
# passedとoldは意図的に使い分けられているのでしょうか?
# ソースも追って見たいと思います。

-- 
Yasumichi Akahoshi
	http://win2linux.sourceforge.jp/
	http://vinedocs.sourceforge.jp/
	http://cxplorer.sourceforge.jp/