(T) Rubí (Extensiones: rb_gc_mark) y variables de instancia
-
13-09-2019 - |
Pregunta
Estoy escribiendo una extensión de rubí que define una clase.
Si uso Data_Wrap_Struct()
para poner en práctica mi devolución de llamada para rb_define_alloc_func()
, ¿necesito para marcar y liberar a las variables de instancia de forma manual? O está siendo manejado que para mí?
Solución
GC Ruby recogerá cualquier objeto Ruby que se hace referencia en las variables de instancia de su objeto Ruby. Usted no tiene que, y no debe, sin instancia de Ruby variables de usted mismo (es decir, cualquier objeto que se accede con rb_iv_set()
/ rb_iv_get()
en su extensión).
Sin embargo, si los objetos envueltos los C struct referencias de Ruby, entonces usted tendrá que marcar los de la devolución de llamada mark
está de paso a Data_Wrap_Struct()
.
(Y siempre se tendrá que liberar a la estructura subyacente y hacer cualquier otra limpieza que sean necesarios como el cierre de archivos, tomas de corriente, etc. en su devolución de llamada free
.)