【发布时间】:2016-10-31 15:04:34
【问题描述】:
我的问题是:当我在这个例子中使用基于范围的 for 循环时,它是否会释放存储在 'vec' 中的每个 'Object' 堆上的内存?我有一个想法,这只是复制一个指针,然后试图释放复制的指针。
我相信 'auto *& obj : vec' 是在声明 'obj' 对指针的引用,然后将存储在 'vec' 中的每个对象的地址分配给它,它的内存将被释放,并设置为空指针。是这样吗?
std::vector <Object*> vec;
vec.push_back(new Object{});
vec.push_back(new Object{});
//....
//clean up
for(auto *& obj : vec)
delete obj, obj = nullptr;
【问题讨论】:
-
这不是你清理矢量的方式。它有自己的机制。你真的需要一个指针向量吗?使用 RAII
-
如果你使用对象而不是指针,一旦向量超出范围,它们将被自动清理,或者你调用向量的清空函数
-
您的代码对我来说看起来不错。从文体的角度来看,我宁愿使用
{ delete obj; obj = nullptr; }。 -
如果你有基于范围的 for,你有 std::unique_ptr 并且应该考虑使用它。
-
如果您想存储类型层次结构中的多种类型,则需要指针。
标签: c++ for-loop heap-memory