मैं एक माता पिता के बच्चे का रिश्ता के साथ दो वर्गों है (ग्राहक & क्रम निर्देशिका & फ़ाइल आदि)बढ़ावा shared_ptr और 'इस'
मैं
typedef boost::shared_ptr<Parent> ParentPtr
और माता पिता के वर्ग में एक बनाने के लिए एक विधि है बच्चे
मुझे अपने माता-पिता को पॉइंटर्स रखने के लिए बच्चों के उदाहरणों की आवश्यकता है।
class Child
{
....
ParentPtr m_parent;
....
}
मैं चाहता हूं कि यह एक साझा_प्टर हो ताकि माता-पिता मौजूदा बच्चों के दौरान गायब न हों। मैं भी अन्य लोगों के माता पिता (माता पिता के लिए कारखाने विधि देता है एक ParentPtr) को ParentPtrs पकड़े
प्रश्न: कैसे बच्चे को एक ParentPtr
प्रयास दे सकते हैं (1)। अभिभावक :: चाइल्डफ़ैक्टरी
child->m_parent.reset(this);
इससे बहुत बुरी चीजें होती हैं। अब माता-पिता पर इशारा करते हुए 2 पेरेंटपीआरटी चेन हैं; परिणाम माता-पिता
प्रयास (2) की समयपूर्व मृत्यु है। अभिभावक
ParentPtr m_me;
जिसे माता-पिता कारखाने के वापसी मूल्य से कॉपी किया गया है। इसलिए मैं
child->m_parent = m_me;
कर सकते हैं लेकिन अब जनक कभी नहीं मरता है क्योंकि यह अपने आप में
महान उत्तर - धन्यवाद – pm100
@ pm100: आपको 'weak_ptr' का उपयोग करने की आवश्यकता क्यों है? अगर बच्चे अपने माता-पिता के मालिक हैं (उन्हें साझा किया गया है) तो आपको 'shared_ptr' का उपयोग करने की आवश्यकता है। एक 'weak_ptr' स्वामित्व का संकेत नहीं देता है। –
ओह हाँ आप सही हैं - मैं एक अलग समाधान के बारे में सोच रहा था - – pm100