我意识到在调用保存共享指针的vector.clear()
之后,shared_ptr
拥有的对象的析构函数没有被释放。
代码示例如下所示。即使 vector.clear()
被调用,在共享指针之后调用的析构函数也超出了范围。我的问题是 - 我是否必须通过重置它们来手动删除 vector 内的所有智能指针?有没有更简单的方法可以提供建议?
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;
}
最佳答案
您有两份 shared_ptr<A>
在这种情况下,一个是 sharedptr
变量和另一个作为 vector 中的元素。
改为这样做
test.push_back(std::move(sharedptr));
现在请注意原始 sharedptr
它的内部移动并且不再可用。另一件事是什么都不做,这是对 shared_ptr 和 sharedptr
的完全有效的用法。超出范围后会自行清理。
关于c++ - 共享指针 vector ,清除 vector 后的内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19334889/