我试图使用其析构函数从对象 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/

    10-09 05:51