Mr. Lidström and I had an argument :)shared_ptr जादू :)
श्री Lidström के दावे कि एक निर्माण shared_ptr<Base> p(new Derived);
बेस की आवश्यकता नहीं है एक आभासी नाशक है:
आर्मेन Tsirunyan: "वास्तव में विल shared_ptr सही ढंग से साफ करें? क्या आप इस मामले में कृपया दिखा सकते हैं कि यह प्रभाव कैसे लागू किया जा सकता है? "
डैनियल Lidström: "shared_ptr कंक्रीट उदाहरण नष्ट करने के लिए अपने स्वयं के नाशक का उपयोग करता है यह सी ++ समुदाय के भीतर आरए II के रूप में जाना जाता है मेरी सलाह है कि आप सभी आप आरए II के बारे में कर सकते हैं सीखना है यह कर देगा अपने।।। जब आप सभी परिस्थितियों में आरएआईआई का उपयोग करते हैं तो सी ++ कोडिंग बहुत आसान होती है। "
आर्मेन Tsirunyan: "मैं आरए II के बारे में पता है, और मैं भी जब PN 0. तक पहुँच जाता है कि अंततः shared_ptr नाशक संग्रहीत पिक्सल हटा सकते हैं पता है लेकिन अगर पिक्सल को
Base
और गतिशील प्रकार सूचक को स्थिर प्रकार सूचक थाDerived
, तब तकBase
में एक आभासी विनाशक है, इसके परिणामस्वरूप अपरिभाषित व्यवहार होगा। अगर मैं गलत हूं तो मुझे सही करें। "डैनियल Lidström: "shared_ptr जानता स्थिर प्रकार कंक्रीट है यह इस जानता है के बाद से मैं अपने निर्माता में इसे पारित जादू की तरह एक सा लगता है, लेकिन मैं इसे डिजाइन और अत्यंत अच्छा कर रहा है आपको विश्वास दिलाता कर सकते हैं।! । "
तो, हमें न्याय करें। साझा_ptr को वर्चुअल विनाशक रखने के लिए पॉलिमॉर्फिक कक्षाओं की आवश्यकता के बिना यह कैसे संभव है (यदि यह है)? अग्रिम
आप [मूल धागे] (http://stackoverflow.com/questions/3899688/default-virtual-dtor/3899726) से लिंक कर सकते थे। –
@ डारिन: मैंने यह किया। – sbi
एक और दिलचस्प बात यह है कि 'shared_ptr पी (नया व्युत्पन्न) '' व्युत्पन्न' वस्तु को इसके विनाशक द्वारा भी नष्ट कर देगा, भले ही यह 'वर्चुअल' है या नहीं। –
dalle