अपडेट: इस उदाहरण में शेयर्ड_पार्ट, बूस्ट में से एक की तरह है, लेकिन यह साझा_पोलिमोर्फिक_डाउन (या डायनामिक_पॉइंट_कास्ट या स्टेटिक_पॉइंट_कास्ट के लिए समर्थन नहीं करता है)!
मैं संदर्भ संख्या गंवाए बिना एक साझा पॉइंटर को एक व्युत्पन्न वर्ग में आरम्भ करने की कोशिश कर रहा हूँ:
struct Base { };
struct Derived : public Base { };
shared_ptr<Base> base(new Base());
shared_ptr<Derived> derived;
// error: invalid conversion from 'Base* const' to 'Derived*'
derived = base;
अब तक सब ठीक है। मुझे उम्मीद नहीं थी कि C ++ को अंतर्निहित रूप से आधार * को व्युत्पन्न * में परिवर्तित किया जाएगा। हालाँकि, मैं चाहता हूं कि कोड द्वारा व्यक्त की गई कार्यक्षमता (जो कि बेस पॉइंटर को डाउन करते समय संदर्भ गणना बनाए रखे)। मेरा पहला विचार बेस में एक कास्ट ऑपरेटर को प्रदान करना था ताकि व्युत्पन्न के लिए एक अंतर्निहित रूपांतरण हो सके (बालकों के लिए: मैं जाँच करूँगा कि डाउन कास्ट वैध है, चिंता न करें):
struct Base {
operator Derived* ();
}
// ...
Base::operator Derived* () {
return down_cast<Derived*>(this);
}
खैर, यह मदद नहीं की। ऐसा लगता है कि कंपाइलर ने मेरे टाइपकास्ट ऑपरेटर को पूरी तरह से नजरअंदाज कर दिया। कोई भी विचार कि मैं कैसे share_ptr असाइनमेंट काम कर सकता हूं? अतिरिक्त बिंदुओं के लिए: किस प्रकार का प्रकार Base* const
है? const Base*
मैं समझ गया, लेकिन Base* const
? const
इस मामले में क्या संदर्भित करता है ?