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í?

¿Fue útil?

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.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top