मेरे पास एक सी लाइब्रेरी है जिसे मैं सी ++ पर पोर्ट कर रहा हूं जो मैन्युअल रूप से संदर्भित गिनती वाले structs का भारी उपयोग करता है। मैंने संदर्भ गणना को स्वचालित रूप से संभालने के लिए shared_ptr
का उपयोग करने पर विचार किया है, लेकिन मैं सी एपीआई को भी बनाए रखना चाहता हूं।सी इंटरफेस में shared_ptr का उपयोग करना?
Object* object_create(void);
Object* object_retain(Object* o);
void object_release(Object* o);
अगर मैं shared_ptr
उपयोग करते हैं, वहाँ किसी भी तरह से प्रभावी रूप से एक सी एपीआई में इस मैनुअल संदर्भ गिनती बेनकाब करने के लिए है: पुराने हस्ताक्षर कुछ इस तरह दिखाई?
बस स्पष्ट करने के लिए; आप 'object_create' से प्राप्त कच्चे सूचक को लपेटने के लिए एक shared_ptr चाहते हैं, और इसे प्रासंगिक समय पर' object_release' कहते हैं? –
@OliCharlesworth नहीं, मैं कर रहा हूँ reimplenting 'Object' सी ++ में एक वर्ग (एक struct के बजाय) के रूप में है, और मैं' shared_ptr' सी ++ कोड के भीतर उपयोग कर रहा हूँ। मुझे दिलचस्पी है यदि किसी साझा_प्टर से कच्चा पॉइंटर प्राप्त करना संभव है और फिर भी इसे साझा_प्टर के रीफॉउंट के साथ काम करना है। –
आप का उपयोग [Boost.intrusive_ptr] (http://www.boost.org/doc/libs/1_53_0/libs/smart_ptr/intrusive_ptr.html) से बेहतर हो सकता है। – Angew