6

クラスを定義する ruby​​ エクステンションを書いています。Data_Wrap_Struct()のコールバックを実装するために使用する場合rb_define_alloc_func()、インスタンス変数を手動でマークして解放する必要がありますか? それとも、それはまだ私のために処理されていますか?

4

1 に答える 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 に答える