想象我有这个结构
struct datalist {
int index;
int number;
};
Run Code Online (Sandbox Code Playgroud)
使用我们正在使用的结构,我们将使用一个列表
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;
}
}
Run Code Online (Sandbox Code Playgroud)
基本上问题是,如果它们是NULL,我们可以从列表中删除和删除空/无效迭代器吗?
如果你有一个指针列表,你可以更容易地删除空指针:
std::list<datalist*> m_SomeList = /* ... */;
m_SomeList.remove(NULL);
Run Code Online (Sandbox Code Playgroud)
显然没有必要调用,delete因为指针已经没有指向任何地方.
另一方面,将擦除逻辑与程序的其他部分(您没有向我们展示)结合起来将指针设置为NULL可能会更有成效.