迭代时从向量和内存中删除一个对象

时间:2018-11-04 23:19:25

标签: c++ c++11 iterator

我试图使用对象的析构函数从对象向量和内存中删除对象。我知道删除迭代器指向的对象,就是使迭代器指向最后删除的元素之后的元素。因此,我尝试实现这一点:

std::vector<Customer*>::iterator j=customersList.begin();
while (j!=customersList.end()){
    customersList.erase(j);
    delete  *j;
}

好吗还是同时应用了擦除和删除功能使其跃升了2位?

1 个答案:

答案 0 :(得分:3)

循环不正确,因为

  1. 您将使j迭代器无效,然后,对已取消引用的无效迭代器发出delete调用。

  2. 在该循环中,j迭代器根本没有增加。

发布delete和擦除的最简单方法是简单的std::for_each,然后是vector::clear()

#include <algorithm>
//...
std::for_each(std::begin(customersList), std::end(customersList), [](Customer *c){delete c;});
customersList.clear();

甚至简单地:

for (Customer* c : customersList )
    delete c;
customersList.clear();