删除传播的传播

Dan*_*iel 1 c++ memory-management vector

如果我delete是一个指针向量,delete在它内部的指针上调用?例如:

vector<Obj *> v = new vector<Obj *>();
v.push_back(new Obj());
delete v;
Run Code Online (Sandbox Code Playgroud)

在此之后,还Obj删除了吗?

Pub*_*bby 5

当矢量被破坏时,它会破坏每个包含的元素.指针在销毁时不会做任何事情,因此内存泄漏并且delete不会单独调用它们.

更好的解决方案是使用 std::unique_ptr

vector<std::unique_ptr<Obj> >
Run Code Online (Sandbox Code Playgroud)

unique_ptr 将删除它在销毁时指向的对象.