2009-06-09 13 views
6

Sto scrivendo un'estensione ruby ​​che definisce una classe. Se utilizzo Data_Wrap_Struct() per implementare la mia callback per rb_define_alloc_func(), è necessario contrassegnare e liberare manualmente le variabili di istanza? O è ancora gestito per me?(U) Ruby Extensions: rb_gc_mark() e variabili di istanza

risposta

7

GC di Ruby raccoglierà qualsiasi oggetto Ruby a cui si fa riferimento nelle variabili di istanza dell'oggetto Ruby. Non devi e non devi liberare le variabili di istanza di Ruby (ad esempio, qualsiasi oggetto a cui si accede con rb_iv_set()/rb_iv_get() nell'estensione).

Tuttavia, se il C struct avvolto riferimenti rubino oggetti, allora dovrete segnare quelli del mark richiamata si sta passando a Data_Wrap_Struct().

(E si avrà sempre a liberare la struct sottostante, e fare qualsiasi altra clean-up che può essere necessario, come la chiusura dei file, prese, ecc nel vostro free callback.)

Problemi correlati