سؤال

أنا أكتب امتداد روبي يحدد الفصل. إذا كنت تستخدم Data_Wrap_Struct() لتنفيذ ردي ل rb_define_alloc_func(), ، هل أحتاج إلى وضع علامة يدويا وتحرير متغيرات المثيل؟ أم أنها لا تزال تعامل معي؟

هل كانت مفيدة؟

المحلول

سيقوم GC ل Ruby بجمع أي كائنات روبي تتم الإشارة إليها في متغيرات مثيل كائن Ruby الخاص بك. ليس لديك، ويجب ألا ينبغي أن يغير مثيل Ruby الخاص بنفسك (أي كائنات تم الوصول إليها rb_iv_set() / rb_iv_get() في امتدادك).

ومع ذلك، إذا ملفوفة ج الهيكل مراجع كائنات روبي، ثم عليك تحديد تلك الموجودة في mark رد الاتصال الذي تمر Data_Wrap_Struct().

(وستحتاج دائما إلى تحرير الهيكل الأساسي، والقيام بأي تنظيف آخر قد يكون ضروريا مثل إغلاق الملفات والمآخذ وما إلى ذلك في حياتك free أتصل مرة أخرى.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top