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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top