निम्नलिखित कोड पर विचार करें।
boost :: shared_ptr; संरचना बी; संरचना ए {~ ए () {std :: cout & lt; & lt; "~ ए" & lt; & lt; std :: endl; } Share_ptr & lt; B & gt; ख; }; संरचना बी {~ बी () {std :: cout & lt; & lt; "~ बी" & lt; & lt; std :: endl; } Share_ptr & lt; ए & gt; ए; }; Int main () {shared_ptr & lt; A & gt; एक (नया ए); shared_ptr & lt; p & gt; बी (नया बी); ए- & gt; बी = बी; बी- & gt; ए = ए; वापसी 0; } कोई आउटपुट नहीं है कोई desctructor कहा जाता है स्मृति रिसाव। मैं हमेशा मानता हूं कि स्मार्ट पॉइंटर स्मृति लीक से बचने में मदद करता है।
अगर मुझे कक्षाओं में क्रॉस-रेफरेंस की आवश्यकता हो तो मुझे क्या करना चाहिए?
यदि आपके पास इस तरह के परिपत्र संदर्भ हैं, तो एक ऑब्जेक्ट को एक दूसरे को रखना चाहिए, न कि shared_ptr ।
से:
क्योंकि कार्यान्वयन संदर्भ गणना का उपयोग करता है, क्योंकि
shared_ptrके उदाहरण चक्रों को पुनः प्राप्त नहीं किया जाएगा। उदाहरण के लिए, यदिमुख्य ()एकshared_ptrकोaपर रखता है, जो प्रत्यक्ष या अप्रत्यक्ष रूप सेshared_ptrको वापस रखता हैए ,ए का उपयोग संख्या 2 हो जाएगी। मूलshared_ptrका विनाशएएक 1. का प्रयोग करेंweak_ptrका उपयोग "चक्र तोड़ें"।
लिंक के लिए धन्यवाद, ग्लेन।
No comments:
Post a Comment