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

tzi*_*ppy -2 c++ vector shared-ptr

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

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;


};
Run Code Online (Sandbox Code Playgroud)

Lig*_*ica 5

实际上所有的记忆都会被释放吗?

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

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

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

现在,这会释放所有记忆吗?不必要.我们不知道是Foo做什么的; 如果你没有在其中正确实现RAII,则可能Foo泄漏内存并且答案变为否定.