निम्नलिखित कोड पर विचार करें।
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