我正在写一个红宝石扩展,定义一个类。 如果我使用Data_Wrap_Struct()来实现我的rb_define_alloc_func()回调,我需要手动标记并释放实例变量?或者是说对我来说还是处理?

有帮助吗?

解决方案

Ruby的GC将收集在你的Ruby对象的实例变量引用的任何Ruby对象。你不必,也不应该,免费Ruby的实例变量自己(即在扩展与rb_iv_set() / rb_iv_get()访问的任何对象)。

然而,如果包装的 C结构的引用Ruby对象,那么你就必须以纪念那些在要传递到markData_Wrap_Struct()回调。

(你将始终有自由的基本结构,以及做任何其他的清理,可能是必要的,如你free回调关闭文件,插座等。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top