वेक्टर इसमें मौजूद डेटा को हटा देता है। चूंकि आपके वेक्टर में पॉइंटर्स होते हैं, यह केवल पॉइंटर्स को हटा देता है, न कि वह डेटा जो वे इंगित कर सकते हैं या नहीं।
यह सी ++ में एक सुंदर सामान्य नियम है कि स्मृति जारी की गई है जहां इसे आवंटित किया गया था। वेक्टर ने जो भी पॉइंटर्स इंगित किया है उसे आवंटित नहीं किया है, इसलिए इसे इसे जारी नहीं करना चाहिए।
आपको शायद अपने वेक्टर में पॉइंटर्स को पहले स्थान पर स्टोर नहीं करना चाहिए। कई मामलों में, आप कुछ इस तरह के साथ बंद बेहतर होगा:
vector<Foo> vect;
vect.push_back(Foo());
// do stuff
vect.erase(f);
बेशक यह मानता है कि फू copyable है, और इसकी प्रतिलिपि निर्माता भी महंगा नहीं है कि, लेकिन यह मेमोरी लीक से बचा जाता है, और आप डॉन फू ऑब्जेक्ट को मिटाना याद रखना नहीं है। एक और दृष्टिकोण स्मार्ट पॉइंटर्स (जैसे बूस्ट के साझा_पीटीआर) का उपयोग करना होगा, लेकिन आपको पॉइंटर सेमेन्टिक्स की आवश्यकता नहीं हो सकती है, इस मामले में सरल समाधान सबसे अच्छा है।
बूस्ट :: shared_ptr का उपयोग करने के लिए बहुत सावधान रहें, क्योंकि यह उत्तर auto_ptr के बजाय, यह उत्तर निर्देश देता है। एसटीएल कंटेनरों का उपयोग auto_ptr के साथ बिल्कुल नहीं किया जा सकता है (कारण इस टिप्पणी में व्याख्या करने के लिए थोड़ा लंबा है)। – Gorpik
ठीक है, मैं इस पर ध्यान देता हूं। धन्यवाद ! – Barth