迭代时删除指针向量的最佳实践

时间:2015-10-05 13:29:21

标签: c++ vector

当迭代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?
}

1 个答案:

答案 0 :(得分:0)

如果您使用new创建每个实例,那么

delete *i;

将完成这项工作。你不会弄乱你的迭代,因为你没有从向量中移除指针,但是你正在释放被指向的内存。

更好的方法是使用std::unique_ptr,然后std::vector析构函数将负责释放内存。