我的问题是:当我使用基于范围的循环,就像在这个例子中,是否释放了存储在'vec'中的每个'Object'堆中的内存?我有一个想法,这只是复制一个指针,然后试图释放复制的指针。我相信'auto * & obj:vec'声明'obj'是对指针的引用,然后将存储在'vec'中的每个对象的地址分配给它,它的内存将被释放,并且设置到nullptr。这是正确的吗?基于范围的循环
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; }'。 –