मेरी कक्षा में, मेरे पास सदस्य चर std::vector<node*> children
क्या यह पॉइंटर को वेक्टर के वेक्टर में पुश_बैक करने के लिए मेमोरी रिसाव है?
क्या निम्न श्रेणी सदस्य फ़ंक्शन मेमोरी लीक बनाता है?
//adds a child node
{
node* child = new node("blah","blah","blah");
child->Set_Parent(this);
children.push_back(child); //<- Is this ok?
}
वेक्टर सूचक की एक प्रतिलिपि बनाता है और मैं एक ही स्मृति, करने के लिए दो संकेत दिए गए और फिर मूल सूचक है, है ना दायरे से बाहर चला जाता है?
यह आसान और स्पष्ट हो सकता है, लेकिन मैं बस अपनी धारणा की पुष्टि करना चाहता हूं।
धन्यवाद
मेरा सुझाव है कि आप स्मार्ट पॉइंटर्स देखें, जैसे कि ['std :: shared_ptr'] (http://en.cppreference.com/w/cpp/memory/shared_ptr)। –
@ जोचिमपिलबोर्ग: आप इस मामले में ['std :: unique_ptr'] (http://en.cppreference.com/w/cpp/memory/unique_ptr) का भी उपयोग कर सकते हैं, क्योंकि 'std :: vector' चाल semantics का समर्थन करता है। – bitmask
यदि नोड्स हमेशा माता-पिता होने चाहिए तो आप इसे कन्स्ट्रक्टर का हिस्सा बना सकते हैं। फिर आपको केवल 'kids.push_back की आवश्यकता है (नया नोड ("ब्लाह", "ब्लाह", "ब्लाह"), यह); – dtech