我试图使用对象的析构函数从对象向量和内存中删除对象。我知道删除迭代器指向的对象,就是使迭代器指向最后删除的元素之后的元素。因此,我尝试实现这一点:
std::vector<Customer*>::iterator j=customersList.begin();
while (j!=customersList.end()){
customersList.erase(j);
delete *j;
}
好吗还是同时应用了擦除和删除功能使其跃升了2位?
答案 0 :(得分:3)
循环不正确,因为
您将使j
迭代器无效,然后,对已取消引用的无效迭代器发出delete
调用。
在该循环中,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();