क्षमा करें अगर इसका स्पष्ट रूप से उत्तर दिया गया है, लेकिन मैं बूस्ट प्रलेखन और लेखों द्वारा ऑनलाइन उलझन में थोड़ा उलझन में हूं।बूस्ट के साथ असाइनमेंट पर प्रश्न :: shared_ptr (बनाम रीसेट() फ़ंक्शन)
मुझे लगता है कि मैं एक shared_ptr भीतर स्मृति जारी करने के लिए (यह मानते हुए संदर्भ गिनती शून्य करने के लिए चला जाता है), जैसे रीसेट() फ़ंक्शन का उपयोग कर सकते हैं,
shared_ptr<int> x(new int(0));
x.reset(new int(1));
यह, मेरा मानना है कि निर्माण में परिणाम होगा दो पूर्णांक वस्तुओं की, और इन दो पंक्तियों के अंत तक शून्य के बराबर पूर्णांक स्मृति से हटा दिया जाएगा।
लेकिन, क्या हुआ अगर मैं कोड की निम्न ब्लॉक का उपयोग करें: जाहिर है
shared_ptr<int> x(new int(0));
x = shared_ptr<int>(new int(1));
, अब * x == 1 सही है, लेकिन मूल पूर्णांक वस्तु जाएगा (शून्य के बराबर) स्मृति से हटा दिया या है किया मैंने उस स्मृति को लीक किया?
ऐसा लगता है कि यह असाइनमेंट ऑपरेटर का मुद्दा होगा जो साझा_प्टर की संदर्भ संख्या को कम करता है, लेकिन स्रोत कोड पर एक नज़र मेरे लिए प्रश्न को स्पष्ट नहीं करता है। उम्मीद है कि कोई और अनुभवी या जानकार मेरी मदद कर सकता है। अग्रिम में धन्यवाद।
मैंने इसे देखा, लेकिन फिर मैंने अतिरिक्त जानकारी भी देखी जो संभावित रूप से विरोधाभासी था। सैनिटी चेक के लिए धन्यवाद। – RandomGuy