J'écris une extension ruby qui définit une classe. Si j'utilise Data_Wrap_Struct()
mettre en œuvre mon rappel pour rb_define_alloc_func()
, dois-je marquer et libérer manuellement les variables d'instance? Ou est-ce toujours traité pour moi?
Réponses:
7 pour la réponse № 1Ruby "s GC collectera tous les objets Ruby qui sontréférencé dans les variables d’instance de votre objet Ruby. Vous n’avez pas à et ne devez pas libérer les variables d’instance Ruby vous-même (c’est-à-dire tout objet accédé avec rb_iv_set()
/ rb_iv_get()
dans votre extension).
Cependant, si le emballé C struct référence des objets Ruby, vous devrez alors marquer ceux-ci dans le mark
rappel que vous passez à Data_Wrap_Struct()
.
(Et vous devrez toujours libérer la structure sous-jacente et effectuer tout autre nettoyage nécessaire, tel que la fermeture de fichiers, de sockets, etc. dans votre ordinateur. free
rappeler.)