まつもと ゆきひろです
In message "[ruby-list:9021] Re: making extension module"
on 98/08/11, Kikutani Makoto <kikutani / sprintmail.com> writes:
|きくたにです。
|そうそう、これ疑問でして、Data_Make_Struct()の第4引数はやっぱ
|書かないとGCされないからまずいんですよね?
第4引数はDataオブジェクトがGCされるタイミングで呼び出される
関数です.Data_Make_Struct()の場合は構造体がmalloc()されるん
で,指定されないとメモリリークになります.
ここに指定するものは
* ポインタの後始末をするもの(freeまで行う必要あり)
です.特別な後処理が必要なければfree(3)を指定すれば良いでしょ
う.たとえば dbmモジュールの場合にはdbm_closeが開放まで行っ
てくれるので,明示的なfreeは必要ないでしょう.
|あと第3引数のmarkてのがたいていの例では0になってるので、どういうときに
|必要なのかわかってません。
markってのは,その構造体が別のRubyオブジェクトに対する参照を
含んでいる場合,その参照先がゴミにならないために指定するもの
です.大抵の拡張モジュールはそんなものはないので,その場合に
は指定する必要はありません.
|もどって、「C++ のデストラクタのようなもの」は「いらない」んじゃ
|ないんですか? かってにGCしてくれるから。
|
|# そんなのrubyレベルで書けって言われたら嫌だよな
いやですねえ.でも,どうしても書きたければ,[ruby-list:9026]
に書いたように lib/final.rb を使う方法があります.
まつもと ゆきひろ /:|)