(U) Rubino Estensioni: rb_gc_mark () e variabili di istanza
-
13-09-2019 - |
Domanda
Sto scrivendo un'estensione rubino che definisce una classe.
Se uso Data_Wrap_Struct()
per implementare il mio callback per rb_define_alloc_func()
, devo marcare e liberare le variabili di istanza manualmente? O è che ancora gestito per me?
Soluzione
GC di Ruby raccoglierà tutti gli oggetti di Ruby cui si fa riferimento nelle variabili di istanza del vostro oggetto Ruby. Non è necessario, e non dovrebbe, le variabili di istanza libero Rubino da soli (cioè qualsiasi oggetto a cui si accede con rb_iv_set()
/ rb_iv_get()
nell'estensione).
Tuttavia, se gli oggetti avvolti i C struct riferimenti Ruby, allora dovrete segnare quelli della richiamata mark
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 chiusura di file, prese, ecc nel vostro callback free
.)