को साफ़ करने के बाद मेमोरी समस्याएं मुझे एहसास हुआ कि वेक्टर.क्लर() को साझा करने वाले पॉइंटर्स को कॉल करने के बाद, shared_ptr द्वारा ऑब्जेक्ट के विनाशक को रिहा नहीं किया जा रहा है।साझा पॉइंटर्स के वेक्टर, वेक्टर
कोड उदाहरण नीचे देखा जा सकता है। यहां तक कि vector.clear() भी कहा जा रहा है, साझा पॉइंटर के बाद नामक विनाशक गुंजाइश से परे चला जाता है। मेरा सवाल है कि उन्हें वेक्टर के अंदर मैन्युअल रूप से वेक्टर के अंदर सभी स्मार्ट पॉइंटर्स को हटाना होगा? क्या कोई आसान तरीका है जिसे आप सलाह दे सकते हैं?
Output :
constructor
I am here
destructor
Code:
#include <vector>
#include <iostream>
#include <memory>
using namespace std;
class A
{
public:
A(){cout << "constructor" << endl;};
~A(){cout << "destructor" << endl;};
};
int main()
{
shared_ptr<A> sharedptr (new A);
std::vector<shared_ptr<A> > test;
test.push_back(sharedptr);
test.clear();
cout << "I am here" << endl;
}
आपका उत्तर वही है जो मैं ढूंढ रहा था। बहुत बहुत धन्यवाद। –
मैं जोड़ता हूं कि प्रश्न में दिखाए गए मामले में, मैं वास्तव में वेक्टर में 'emplace_back' के माध्यम से वेक्टर में जगह बनाना पसंद करूंगा, ताकि एक सुलभ नामित चर ('shareptr') से बचने के लिए जिसका उपयोग खतरनाक होगा 'std :: move'। – us2012