对shared_ptr的向量调用clear().内存会被释放吗



我有一个boost::shared_ptrstd::vector成员到类内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;

};

是。​​​​​​​​​​​​​​​​​​​​​​​​​​​

所有的内存真的会被释放吗?

这取决于你在问什么。表面上看,是的

智能指针的全部目的是为您管理内存,而共享指针的全部用途是,当不再有共享指针指向它时,它们指向的东西会自动释放。

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

现在,这能释放所有内存吗?不一定。我们不知道Foo做什么;如果您没有在其中正确地实现RAII,那么Foo可能会泄漏内存,答案会变成no

最新更新