Question

J'écris une extension de rubis qui définit une classe. Si j'utilise Data_Wrap_Struct() pour mettre en œuvre mon rappel pour rb_define_alloc_func(), dois-je marquer manuellement et libérer les variables d'instance? Ou est-ce encore traité pour moi?

Était-ce utile?

La solution

GC Ruby recueillera des objets Ruby qui sont référencés dans votre variables d'instance de l'objet Ruby. Vous ne devez pas, et ne devrait pas, les variables d'instance libre Ruby vous-même (à savoir tous les objets accessibles avec rb_iv_set() / rb_iv_get() dans votre extension).

Cependant, si les enveloppées struct C références objets Ruby, alors vous devez marquer ceux dans le rappel de mark vous passez à Data_Wrap_Struct().

(Et vous aurez toujours de libérer le struct sous-jacente, et faire tout autre nettoyage qui peut être nécessaire, comme la fermeture des dossiers, des prises, etc. dans votre rappel free.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top