当迭代STL ::指针向量时,沿途删除对象的最佳做法是什么?
我理解擦除删除习惯用法。但由于向量包含指针,我担心这只会删除指针,但会将实例留在内存中。
例如,我会做类似
的事情std::vector<someClass*> someClassList
std::vector<someClass*>::iterator i;
for (i=someClassList.begin(); i != someClassList.end(); ++i){
determine_if_should_be_deleted(i);
// <--How to delete the object and remove it from the vector without
// <--messing up the iterator?
}
答案 0 :(得分:0)
如果您使用new
创建每个实例,那么
delete *i;
将完成这项工作。你不会弄乱你的迭代,因为你没有从向量中移除指针,但是你正在释放被指向的内存。
更好的方法是使用std::unique_ptr
,然后std::vector
析构函数将负责释放内存。