Ich erkannte, dass nach dem Aufrufen von vector.clear(), die freigegebene Zeiger halten, die Destruktoren des Objekts, die durch shared_ptr besitzen nicht freigegeben werden.Vektor von geteilten Zeigern, Speicherprobleme nach dem Löschen des Vektors
Codebeispiel kann unten gesehen werden. Auch der Aufruf von vector.clear(), destructor, der nach Shared Pointer aufgerufen wird, geht über den scope.My Frage muss ich alle Smart Pointer innerhalb des Vektors manuell löschen, indem Sie sie zurücksetzen? Gibt es einen einfacheren Weg, den Sie beraten können?
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;
}
Ihre Antwort ist genau das, was ich gesucht habe. Danke vielmals. –
Ich würde hinzufügen, dass ich in dem in der Frage gezeigten Fall eigentlich vorziehen würde, den Vektor im Vektor über 'emplace_back' zu konstruieren, um eine zugängliche benannte Variable (' sharedptr') zu vermeiden, deren Verwendung danach gefährlich wäre 'std :: move'. – us2012