gpt4 book ai didi

c++ - 迭代时从 vector 和内存中删除一个对象

转载 作者:行者123 更新时间:2023-11-30 02:17:50 25 4
gpt4 key购买 nike

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

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

可以吗?或者它通过同时应用删除和删除来跳跃 2 个位置?

最佳答案

循环不正确,因为

  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();

关于c++ - 迭代时从 vector 和内存中删除一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53146458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com