質問

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

役に立ちましたか?

解決

RubyのGCは、あなたのRubyオブジェクトのインスタンス変数で参照されている任意のRubyのオブジェクトを収集します。あなたがする必要はありません、自分自身(あなたの拡張でrb_iv_set() / rb_iv_get()でアクセスすなわち、任意のオブジェクト)、いけない自由なRubyのインスタンス変数です。

しかし、包まれた、のCの構造体の参照をRubyのオブジェクトなら、あなたはmarkし渡しているData_Wrap_Struct()コールバックでそれらをマークする必要があります。

(そして、あなたがいつも根底にある構造体を解放する必要があり、そのようなあなたのfreeコールバック内のファイル、ソケットなどの閉鎖などが必要な場合があり、他のクリーンアップを行います。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top