वेक्टर पुश_बैक पर प्रतियां बनाते हैं। चूंकि एक सूचक 'बस एक और चर' होता है (लेकिन एक जो स्मृति को इंगित करता है), जब आप एक पूर्णांक सूचक को पुश_बैक करते हैं जिसे पहले आवंटित किया गया था, तो आप पॉइंटर के मान को वेक्टर में प्रतिलिपि बनाते हैं, जिससे संभावित खतरनाक पॉइंटर होता है, क्योंकि वहां स्मृति में एक ही स्थान पर इशारा करते हुए दो पॉइंटर्स बनें।
आपके पहले उदाहरण में, आपको मैन्युअल रूप से मेमोरी को हटाना होगा।
class graph //quick-format
{
vector<node*> nodes;
add_node(node n)
{
node *temp = new node;
*temp = n;
nodes.push_back(temp)
}
~graph()
{
for(int i = 0; i < nodes.size(); i++)
delete nodes[i];
}
};
एक चेतावनी के रूप में, ग्राफ की प्रतिलिपि अर्थ विज्ञान: एक रणनीति मैं ग्राफ वर्गों के साथ दखल के लिए पहले उपयोग किए गए कुछ इस तरह (काम पर जा रहा है और जल्दी से टाइपिंग की वजह से सामान के विशाल मात्रा में संशोधित) है जांच की जानी चाहिए। जैसा कि यह खड़ा है, इसके परिणामस्वरूप पहले से मुक्त स्मृति को हटा दिया जाएगा। लाभ यह है कि आप हमेशा लटकने वाले नोड्स का एक ही सेट रख सकते हैं। कैविट एम्प्टर, किसी भी प्रत्यक्ष मेमोरी उपयोग की तरह ..
हालांकि, यदि आप केवल एक गैर-सूचक चर को धक्का देते हैं, तो आपके अंत से स्मृति लीक होने की कोई संभावना नहीं है। संभवतः वेक्टर रिसाव होगा, लेकिन ... उपकरण की परिपक्वता में इस बिंदु पर व्यावहारिक रूप से असंभव है।
स्रोत
2010-05-07 21:08:31
जब आप कहते हैं कि यह स्मृति को स्वयं ही संभाल लेगा, तो मेरा मतलब है कि मैं एक वेक्टर.क्लर() को कॉल करने के बाद? – TheFuzz
जब वेक्टर नष्ट हो जाता है तो स्मृति पुनर्प्राप्त की जाएगी। 'स्पष्ट()' वास्तव में किसी भी स्मृति को रद्द नहीं करेगा; यदि वे बाद में फिर से बढ़ने की जरूरत है तो वेक्टर क्षमता बनाए रखेगा। –
तो मुझे पॉइंटर्स का उपयोग न करने और बस अस्थायी स्टैक वैरिएबल बनाने से रोकने के लिए क्या रोक रहा है, फिर मुझे वेक्टर पर धक्का दे रहा है जब मुझे आवश्यकता हो? कुछ कारणों से पॉइंटर्स ने अपना अंक खो दिया। – TheFuzz