मुझे यकीन नहीं है कि क्या मैं किसी दस्तावेज़ त्रुटि या सिरदर्द से अधिक पीड़ित हूं, इसलिए ...मैं किसी सदस्य को shared_ptr कैसे बना सकता हूं?
मैं जो करना चाहता हूं वह एक साझा_ptr है जो किसी अन्य के साथ स्वामित्व साझा करता है, लेकिन जो किसी सदस्य का संदर्भ देता है ऑब्जेक्ट की पूरी वस्तु के बजाय ऑब्जेक्ट। सरल उदाहरण के लिए, प्रारंभिक बिंदु ...
struct s
{
int a, b;
};
shared_ptr<s> s1 (new s); // pointing to whole object
en.cppreference.com से
, निर्माता (8) shared_ptr के
template< class Y >
shared_ptr(const shared_ptr<Y>& r, T *ptr);
विवरण का उल्लेख है "एक shared_ptr जो r साथ स्वामित्व जानकारी है कि शेयर निर्माणों है ..., लेकिन एक असंबंधित और अप्रबंधित सूचक पीआरआर रखता है ... जैसे कि सामान्य उपयोग मामलों में जहां पीआरआर आर द्वारा प्रबंधित ऑब्जेक्ट का सदस्य होता है "।
तो ... T
बस उस निर्माता में टेम्पलेट से गलती से चूक गया था, या क्या मुझे कुछ याद आ रही है? वास्तव में, वाई ऐसा लगता है कि यह मेरे लिए भी गलत है, तो आम तौर पर यह है कि कन्स्ट्रक्टर सही ढंग से वर्णित है?
क्या मैं आशा करती हूं कि मैं क्या कर सकते हैं कुछ इस तरह है ... सदस्य a
(एक int
) को
shared_ptr<int> s2 (s1, &(s1.get()->a));
s2
अंक है, लेकिन शेयरों s1
साथ पूरी वस्तु का स्वामित्व।
क्या वह साईं है? जबकि Y
पैरामीटर है कि विशेष रूप shared_ptr
निर्माता पर टेम्पलेट पैरामीटर है
शायद मैं कुछ याद कर रहा हूँ, लेकिन क्यों आप एक सदस्य वर के लिए एक shared_ptr कि आवंटित नहीं किया गया है चाहेगा ढेर पर? यानी एस 2 के लिए कच्चे सूचक का उपयोग क्यों न करें? –
@ आरसी - यह सुनिश्चित करने के लिए कि यदि मूल shared_ptr को हटा दिया जाता है, तो वस्तु स्वयं नहीं होती - यानी यह सुनिश्चित करने के लिए कि एस 2 एक खतरनाक सूचक नहीं बनता है। वास्तविक दुनिया के उदाहरण में, एस 1 और एस 2 के दायरे समान नहीं होंगे। – Steve314
हां, यह पूरी तरह से सभ्य है। इसके अलावा आपको '.get()' की आवश्यकता नहीं है। – atzz