删除存储在列表中的对象的空指针?

时间:2012-05-13 20:32:15

标签: c++ visual-c++

想象我有这个结构

struct datalist {
    int index;
    int number;
};

使用我们正在使用的结构,我们将使用列表

while(Iter != m_SomeList.end());
{
    if(*Iter) 
    {
        //do something

        Iter++;
    }
    else   //Iterator is NULL so can we erase it from the list like so?
    {
        datalist* pAR = *Iter;
        Iter = m_SomeList.erase(Iter);
        delete  pAR;    pAR = NULL;
    }
}

基本上问题是,如果它们是NULL,我们可以从列表中删除和删除空/无效迭代器吗?

2 个答案:

答案 0 :(得分:6)

如果你有一个指针列表,你可以更容易地删除空指针:

std::list<datalist*> m_SomeList = /* ... */;
m_SomeList.remove(NULL);

显然没有必要调用delete,因为指针已经没有指向任何地方。

另一方面,将擦除逻辑与程序的其他部分(您没有向我们展示)结合起来将指针设置为NULL可能会更有成效。

答案 1 :(得分:1)

假设Iterlist<datalist *>::iterator,那么是的,你可以。

您不需要删除pAR,因为您知道它是null,但允许这样做(它没有效果)。你已经用正确的方式编写循环来处理擦除。

(你应该总是在C ++中写++Iter;而不是Iter++; - 它们通常是相同的,但偶尔前者的效率会大大提高。)