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

Best practice for deleting vector of pointers while iterating

本文关键字:最佳 向量 删除 指针 迭代      更新时间:2023-10-16

当迭代指针的STL::vector时,在此过程中删除对象的最佳实践是什么?

我理解擦除-删除习语。但是由于vector包含指针,我担心这只会删除指针,而使实例在内存中徘徊。

例如,我会这样做

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?
}

如果使用new创建每个实例,则

delete *i;

就可以了。因为没有从vector中移除指针,所以不会弄乱迭代,但是释放了所指向的内存。

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