Pergunta

Eu estou escrevendo uma extensão ruby ??que define uma classe. Se eu usar Data_Wrap_Struct() para implementar o meu retorno para rb_define_alloc_func(), eu preciso marca manualmente e liberar as variáveis ??de instância? Ou é que ainda manipulados para mim?

Foi útil?

Solução

GC do Ruby irá recolher quaisquer objetos Ruby que são referenciados em variáveis ??de instância do seu objeto Ruby. Você não tem que, e não deve, livres de Ruby exemplo variáveis ??você mesmo (ou seja, quaisquer objetos acessados ??com rb_iv_set() / rb_iv_get() em sua extensão).

No entanto, se o envolveu C struct referências objetos Ruby, então você vai ter que marcar aqueles no callback mark você está passando para Data_Wrap_Struct().

(E você sempre terá de libertar a estrutura subjacente, e fazer qualquer outra clean-up que podem ser necessárias, tais como fechamento de arquivos, tomadas, etc. no seu retorno free.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top