删除带指针的列表以及对象必须清除

时间:2015-12-13 06:04:27

标签: c++ list object erase

以下是用于说明我的问题的相同的c ++代码  我知道其他工作方法,但有兴趣知道下面的代码是否错误?

Void pupulatelist()
{
   //populating the list with some int pointers,in actual i have some other objects to delete when accessed each time.
    for(int i =0;i<5;i++)
    {
         int *p = new int(i);
         list.push_back(p);
    }  
   //want to delete and erase the contents of the above list
   // if i dont use erase my actual code is crashing.  

    for(std::list<int *>::iterator iter = list.begin(); iter != list.end(); ++iter)
    {
       delete(*iter);    
       list.erase(iter--);
     }  
 }

1 个答案:

答案 0 :(得分:2)

list.erase退出for循环更简单,只需在完成所有操作后致电list.clear

如果你想保持for循环,需要修复它。它应该是这样的:

for (auto iter = list.begin(); iter != list.end();) {
    delete *iter;
    iter = list.erase(iter);
}

erase将一个迭代器返回到被删除的元素之后的元素,因此您不需要在循环中递增。此外,您的原始循环会将其减少到列表开始之前的未定义行为(UB)。