クラスを定義するルビー拡張機能を書いています。 私が使用する場合 Data_Wrap_Struct()
のコールバックを実装する rb_define_alloc_func()
、インスタンス変数を手動でマークして解放する必要がありますか?または、それはまだ私のために処理されますか?
回答:
回答№1の場合は7RubyのGCは、Rubyオブジェクトのインスタンス変数で参照されます。Rubyインスタンス変数を自分で解放する必要はありませんし、すべきではありません(つまり、 rb_iv_set()
/ rb_iv_get()
拡張機能で)。
ただし、ラップされた場合 C構造体 Rubyオブジェクトを参照する場合は、それらをマークする必要があります mark
受け渡し先のコールバック Data_Wrap_Struct()
.
(そして、基礎となる構造体を常に解放する必要があり、ファイル、ソケットなどを閉じるなど、必要なその他のクリーンアップを行う必要があります free
折り返し電話。)