クラスを定義する ruby エクステンションを書いています。Data_Wrap_Struct()
のコールバックを実装するために使用する場合rb_define_alloc_func()
、インスタンス変数を手動でマークして解放する必要がありますか? それとも、それはまだ私のために処理されていますか?
質問する
963 次
1 に答える
7
RubyのGCは、Rubyオブジェクトのインスタンス変数で参照されているRubyオブジェクトを収集します。Rubyインスタンス変数(つまり、拡張機能のrb_iv_set()
/でアクセスされるオブジェクト)を自分で解放する必要はありません。rb_iv_get()
ただし、ラップされたC構造体がRubyオブジェクトを参照しているmark
場合は、渡すコールバックでそれらをマークする必要がありますData_Wrap_Struct()
。
(そして、常に基礎となる構造体を解放し、コールバックでファイルやソケットなどを閉じるなど、必要になる可能性のあるその他のクリーンアップを実行する必要がありfree
ます。)
于 2009-06-09T20:34:02.813 に答える