2013-02-20 16 views
5

मेरे पास एक संरचना है जो आधार वर्ग Entity से प्राप्त वस्तुओं का प्रबंधन करती है, लेकिन उनके जीवनकाल को नियंत्रित नहीं करती है। मैं चाहता हूं कि इस संरचना को weak_ptr<Entity> जैसे कमजोर पॉइंटर्स दिए जाए ताकि यह पता चल सके कि वस्तु कहीं और नष्ट हो गई है या नहीं।बेस क्लास के कमजोर_पीटीआर, जबकि shared_ptr व्युत्पन्न वर्ग का है?

हालांकि, साझा सूचक जहां साझा सूचक रहता है, के बाहर, मैं चाहता हूं कि साझा सूचक अधिक विशिष्ट shared_ptr<SpecificEntity> (विशिष्ट एंटीटी आधार वर्ग के रूप में इकाई का उपयोग करता हो)।

क्या इसे पूरा करने का कोई तरीका है, या ऐसा कुछ है?

उत्तर

11

यह बहुत संभव है। आप हमेशा shared_ptr<Derived> को shared_ptr<Base> पर निहित रूप से परिवर्तित कर सकते हैं, और दूसरी दिशा के लिए आपके पास std::static_pointer_cast और std::dynamic_pointer_cast है, जो आप – की अपेक्षा करते हैं, यानी आप मूल सूचक के साथ स्वामित्व साझा करने वाले विभिन्न प्रकार के नए सूचक के साथ समाप्त होते हैं। उदाहरण:

std::shared_ptr<Base> p(new Derived); 

std::shared_ptr<Derived> q = std::static_pointer_cast<Derived>(p); 

std::shared_ptr<Base> r = q; 

या, अधिक सी ++ 11-शैली:

auto p0 = std::make_shared<Derived>(); 

std::shared_ptr<Base> p = p0; 

auto q = std::static_pointer_cast<Derived>(p); 
+0

आह, मैं इसके लिए डाले थे नहीं पता था! धन्यवाद! –

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