gpt4 book ai didi

c - (U) Ruby 扩展 : rb_gc_mark() and instance variables

转载 作者:数据小太阳 更新时间:2023-10-29 07:05:59 25 4
gpt4 key购买 nike

我正在编写定义类的 ruby​​ 扩展。如果我使用 Data_Wrap_Struct() 来实现我对 rb_define_alloc_func() 的回调,我是否需要手动标记和释放实例变量?还是仍然为我处理?

最佳答案

Ruby 的 GC 将收集在您的 Ruby 对象的实例变量中引用的所有 Ruby 对象。您不必也不应该自己释放 Ruby 实例变量(即在您的扩展中使用 rb_iv_set()/rb_iv_get() 访问的任何对象)。

但是,如果包装的 C struct 引用 Ruby 对象,那么您必须在传递给 Data_Wrap_Struct() 的 mark 回调中标记这些对象

(并且您将始终必须释放底层结构,并在您的 free 回调中执行任何其他可能需要的清理,例如关闭文件、套接字等。)

关于c - (U) Ruby 扩展 : rb_gc_mark() and instance variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/970525/

25 4 0