Ruby's GC будет собирать любые объекты Ruby, на которые есть ссылки в переменных экземпляра вашего объекта Ruby. Вам не нужно и не следует освобождать переменные экземпляра Ruby самостоятельно (т. Е. Любые объекты, к которым обращаются rb_iv_set()
/ rb_iv_get()
в вашем расширении).
Однако, если обернутая C struct ссылается на объекты Ruby, вам придется пометить объекты в обратном вызове mark
, который вы передаете Data_Wrap_Struct()
.
(И вам всегда нужно будет освободить базовую структуру и выполнить любую другую очистку, которая может потребоваться, такую как закрытие файлов, сокетов и т. Д. В вашем обратном вызове free
.)