2009-06-09 14 views
6

Estoy escribiendo una extensión de ruby ​​que define una clase. Si uso Data_Wrap_Struct() para implementar mi devolución de llamada para rb_define_alloc_func(), ¿necesito marcar y liberar manualmente las variables de instancia? ¿O todavía se maneja para mí?(U) Ruby Extensions: rb_gc_mark() y variables de instancia

Respuesta

7

Ruby's GC recogerá los objetos de Ruby a los que se hace referencia en las variables de instancia de su objeto Ruby. No tiene que, y no debe, liberar variables de instancia de Ruby usted mismo (es decir, cualquier objeto al que se acceda con rb_iv_set()/rb_iv_get() en su extensión).

Sin embargo, si la envuelta C struct referencias objetos de Ruby, entonces usted tiene que marcar los de la mark devolución de llamada 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, tales como archivos de cierre, tomas de corriente, etc., en su free de devolución de llamada.)

Cuestiones relacionadas