Frage

Ich schreibe eine Ruby-Erweiterung, die eine Klasse definiert. Wenn ich Data_Wrap_Struct() benutze mein Rückruf für rb_define_alloc_func() zu implementieren, muss ich manuell markieren und die Instanzvariablen befreien? Oder ist das für mich nach wie vor behandelt?

War es hilfreich?

Lösung

Rubys GC wird alle Ruby-Objekte sammeln, die in Ihrem Ruby-Objekt Instanzvariablen referenziert werden. Sie haben nicht zu, und sollte nicht, frei Ruby-Instanz-Variablen selbst (das heißt alle Objekte mit rb_iv_set() / rb_iv_get() in Ihrer Erweiterung zugegriffen wird).

Wenn jedoch die eingewickelt C struct Referenzen Ruby-Objekte, dann werden Sie das in dem mark Rückruf markieren müssen Sie Data_Wrap_Struct() sind vorbei.

(Und Sie werden immer die zugrunde liegende Struktur befreien müssen und tun andere Bereinigungs, die erforderlich sein können, wie Schließen von Dateien, Steckdosen usw. in Ihrem free Rückruf.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top