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