我有一个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;
};
答案 0 :(得分:6)
是
答案 1 :(得分:5)
实际释放所有内存吗?
这取决于你的要求。从表面上看,是。
智能指针的全部目的是为他们管理内存,以及共享指针的全部目的,当没有更多共享指针指向它时,它们指向的东西会自动释放。
清除向量时,它包含的共享指针将被销毁,并且此操作会自动取消分配任何封装对象,而不再引用它们的共享指针。
现在,这是免费的所有内存吗?不必要。我们不知道Foo
做了什么;如果你没有在其中正确实施RAII,那么Foo
可能泄漏记忆而答案变为不。