एक मजबूत सूचक वस्तु के लिए एक मजबूत संदर्भ रखता है - अर्थ: जब तक सूचक मौजूद है, वस्तु नष्ट नहीं होती है।
ऑब्जेक्ट प्रत्येक पॉइंटर के व्यक्तिगत रूप से "पता" नहीं है, केवल उनकी संख्या - यह मजबूत संदर्भ गणना है।
एक कमजोर_प्टर प्रकार वस्तु को "याद करता है", लेकिन इसे नष्ट होने से नहीं रोकता है। आप ऑब्जेक्ट को कमजोर पॉइंटर के माध्यम से सीधे एक्सेस नहीं कर सकते हैं, लेकिन आप कमजोर पॉइंटर से मजबूत पॉइंटर बनाने की कोशिश कर सकते हैं। यदि ऑब्जेक्ट अब मौजूद नहीं है, परिणामी मजबूत सूचक शून्य है:
shared_ptr<int> sp(new int);
weak_ptr<int> wp(sp);
shared_ptr<int> stillThere(wp);
assert(stillThere); // yes, the original object still exists, we can now use it
stillThere.reset(); // releasing the strong reference
sp.reset(); // here, the object gets destroyed,
// because there's only one weak_ptr left
shared_ptr<int> notReally(wp);
assert(!notReally); // the object is destroyed,
// you can't get a strong pointer to it anymore
"_ यह कैसे काम करता है? _" यह सामान्य रूप से नहीं है। यह एक पागल विचार है। आपको डिजाइन स्तर पर चक्र को हटाना होगा। – curiousguy
@curiousguy कुछ दृश्य मौजूद हैं जो आपकी विधि काम नहीं करते हैं, यानी जब चक्रवात संदर्भों को _by design_ पेश किया जाता है। उदाहरण के लिए, जीसी के बिना गतिशील भाषा का दुभाषिया प्रथम श्रेणी के लैम्ब्डा फ़ंक्शन का समर्थन करता है जो संलग्न वातावरण में अपना नाम कैप्चर करके देशी रिकर्सन की अनुमति देता है (इसलिए जब इसे स्थानीय रूप से बनाया जाता है और फिर प्रथम श्रेणी के मान के रूप में लौटाया जाता है, तो कुछ भी नहीं यह, और वहाँ चक्रीय संदर्भ होने के लिए है; यह परंपरागत रूप से _downward funarg problem_ के रूप में जाना जाता है और शास्त्रीय समाधान एक जीसी का उपयोग कर रहा है)। – FrankHB