Я понял, что после вызова vector.clear(), которые содержат общие указатели, деструкторы объекта, которые принадлежат 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;
}