श्री लिडस्ट्रॉम और मेरे पास एक तर्क था :)
श्री लिडस्ट्रॉम का दावा है कि एक निर्माण के shared_ptr<Base> p(new Derived);
लिए आधार को एक आभासी विध्वंसक की आवश्यकता नहीं होती है:
आर्मेन Tsirunyan : "वास्तव में विल shared_ptr सही ढंग से साफ आप इस मामले में खुश कर सके प्रदर्शित कैसे उस प्रभाव से लागू किया जा सकता है??"
डैनियल लिडस्ट्रॉम : " शेयर्ड_एप्ट्र कंक्रीट के इंस्टेंस को हटाने के लिए अपने स्वयं के विध्वंसक का उपयोग करता है। इसे C ++ समुदाय के भीतर RAII के रूप में जाना जाता है। मेरी सलाह है कि आप RAII के बारे में सभी सीख सकते हैं। यह आपके C ++ को इतना आसान बना देगा जब आप उपयोग करते हैं। सभी स्थितियों में आरएआई। "
आर्मेन त्सिरुयन : "मैं RAII के बारे में जानता हूं, और मुझे यह भी पता है कि अंततः share_ptr विध्वंसक संग्रहीत px को हटा सकता है जब pn 0. तक पहुंचता है, लेकिन अगर px के पास स्थिर प्रकार सूचक
Base
और गतिशील प्रकार सूचक करने के लिए हैDerived
, तो जब तकBase
कि एक आभासी विध्वंसक नहीं है, यह अपरिभाषित व्यवहार का परिणाम होगा। अगर मैं गलत हूं तो मुझे सुधारें। "डैनियल लिडस्ट्रॉम : " शेयर्ड_प्ट्र को पता है कि स्टैटिक टाइप कंक्रीट है। यह जानता है क्योंकि मैंने इसे इसके कंस्ट्रक्टर में पास किया है। जादू जैसा लगता है, लेकिन मैं आपको विश्वास दिलाता हूं कि यह डिजाइन और बेहद अच्छी है।"
इसलिए हमें जज कीजिए। यह कैसे संभव है (यदि यह है) वर्चुअल विध्वंसक होने के लिए पॉलीमॉर्फिक कक्षाओं की आवश्यकता के बिना साझा करने के लिए लागू करना संभव है ? अग्रिम में धन्यवाद