【发布时间】:2018-11-04 23:19:24
【问题描述】:
我尝试使用其析构函数从对象向量和内存中删除一个对象。我理解删除迭代器指向的对象是使迭代器指向删除的最后一个元素之后的元素。因此,我尝试实现这一点:
std::vector<Customer*>::iterator j=customersList.begin();
while (j!=customersList.end()){
customersList.erase(j);
delete *j;
}
可以吗?或者它通过应用擦除和删除来跳跃2个地方?
【问题讨论】:
-
你为什么首先使用指针?
std::vector为您在堆上分配内存,您不必将该功能加倍。 -
您的循环不正确。要退出循环,
j必须是customersList.end(),这意味着您只是在循环的最后一次迭代中取消引用了一个越过容器末尾的迭代器(并试图delete无效指针)。 -
它跳了 2 个地方 -- 你说的“跳了 2 个地方”是什么意思?
-
@Mr.OY -- 您确实看到您的代码未能检索到
erase的返回值?也许您错过了答案中非常重要的部分。 -
@Mr.OY 根本不是这么说的。你在哪里看到的?