我试图使用其析构函数从对象 vector 和内存中删除对象。我知道删除迭代器指向的对象,就是使迭代器指向最后删除的元素之后的元素。因此,我试图实现这一点:
std::vector<Customer*>::iterator j=customersList.begin();
while (j!=customersList.end()){
customersList.erase(j);
delete *j;
}
好吗还是通过同时应用擦除和删除功能跃升了2位?
最佳答案
循环不正确,因为
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();
关于c++ - 迭代时从 vector 和内存中删除对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53146458/