2009-06-09 15 views
6

मैं एक रूबी एक्सटेंशन लिख रहा हूं जो कक्षा को परिभाषित करता है। यदि rb_define_alloc_func() के लिए मेरे कॉलबैक को लागू करने के लिए मैं Data_Wrap_Struct() का उपयोग करता हूं, तो क्या मुझे आवृत्ति चर मैन्युअल रूप से चिह्नित और मुक्त करने की आवश्यकता है? या वह अभी भी मेरे लिए संभाला गया है?(यू) रूबी एक्सटेंशन: rb_gc_mark() और इंस्टेंस चर

उत्तर

7

रुबी का जीसी आपके रूबी ऑब्जेक्ट के आवृत्ति चर में संदर्भित किसी भी रूबी ऑब्जेक्ट्स को एकत्रित करेगा। आपको रूबी इंस्टेंस वेरिएबल्स को मुफ्त में नहीं करना चाहिए, और नहीं करना चाहिए (यानी आपके एक्सटेंशन में rb_iv_set()/rb_iv_get() के साथ किसी भी ऑब्जेक्ट को एक्सेस किया गया है)।

हालांकि, अगर लिपटे सी struct संदर्भ रूबी वस्तुओं, तो आप mark कॉलबैक आप Data_Wrap_Struct() करने से गुजर रहे हैं में उन लोगों को चिह्नित करना होगा।

(और आप हमेशा अंतर्निहित struct मुक्त करने के लिए है, और किसी भी अन्य सफाई इस तरह के बंद करने फ़ाइलें, सॉकेट, अपने free कॉलबैक में आदि के रूप में आवश्यक हो सकता है कि क्या करेंगे।)

संबंधित मुद्दे