我的問題是:當我使用基於範圍的循環,就像在這個例子中,是否釋放了存儲在'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; }'。 –