我有一个boost::shared_ptr
的std::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。