From: matz@... (Yukihiro Matsumoto) Date: 1998-08-11T12:43:11+09:00 Subject: [ruby-list:9027] Re: making extension module まつもと ゆきひろです In message "[ruby-list:9021] Re: making extension module" on 98/08/11, Kikutani Makoto 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 を使う方法があります. まつもと ゆきひろ /:|)