在shared_ptr的向量上调用clear()。记忆会被释放吗?

时间:2014-09-30 12:22:42

标签: c++ vector shared-ptr

我有一个std::vector成员boost::shared_ptr成员类中的Foo类对象。 函数SetData()向向量添加指向Foo的新对象的指针。 Foo的构造函数生成pData指向的数据的内部副本。 现在,当我调用Reset()函数时,是否所有内存都会被释放?

class myClass()
{
 void SetData(char* pData, size_t nSize)
 {
   boost::shared_ptr<Foo> pFoo(new Foo(pData, nSize));
   mVector.push_back(pFoo);
 }

 void Reset()
 {
   mVector.clear();
 }

private:
    std::vector<boost::shared_ptr<Foo>> mVector;


};

2 个答案:

答案 0 :(得分:6)

答案 1 :(得分:5)

  

实际释放所有内存吗?

这取决于你的要求。从表面上看,是。

智能指针的全部目的是为他们管理内存,以及共享指针的全部目的,当没有更多共享指针指向它时,它们指向的东西会自动释放。

清除向量时,它包含的共享指针将被销毁,并且此操作会自动取消分配任何封装对象,而不再引用它们的共享指针。

现在,这是免费的所有内存吗?不必要。我们不知道Foo做了什么;如果你没有在其中正确实施RAII,那么Foo可能泄漏记忆而答案变为