我正在尝试使用 mylist.erase(); 删除链接列表中的节点,但该节点仍在列表中。我尝试使用 delete(),但程序崩溃了。任何的想法?
list <Person*> :: iterator it;
it = gamelist.begin(); //gamelist is a <Person*> list. it is an iterator to this list.
while (it!=gamelist.end()){
if ((*it)->is_dead == true) {
delete (*it); //if I comment this line the program does not crash but the "dead" Person still remains in the list.
it = gamelist.erase(it);
}
else ++it;
}
答案 0 :(得分:4)
删除指针不会影响指针是否保留在容器中。由于您尚未显示一个程序,该程序显示该节点仍然在列表中,因此我认为在调用erase
之后它不会保留。
如果您使用new
分配了指向的对象,则必须在某个时刻delete
。如果在此处删除指针时程序崩溃,则意味着
new
创建的对象。无法在程序中“测试”指针的有效性(除了检查它是否为null,但是删除null是正常的并且不会崩溃,所以这不是你的问题)。您必须分析您的计划并自行保证其有效性。智能指针使指针的有效性更容易推理。我建议你使用它们。