我有一个标准的指针向量。
在什么情况下,这个向量的迭代器可能会失效?
我有理由相信,当一个对象被删除时,任何引用它的向量迭代器都会因此失效。然而,这对我来说似乎不正确。我确实相信这将是 Managed .NET 中容器的标准行为,但在 c++ 中这对我来说似乎不合适。
for (It = Vec.begin(); It != Vec.end(); It++){
GoToOtherCode((*It));
}
function GoToOtherCode (ObjectType* Obj){
delete Obj;
}
这应该使 Iterator It 无效吗?在我看来,它不应该,但后来我遇到了一个难以调试的问题!(我害怕我的解决方法——通过整数索引遍历向量。(这很好用......我只是害怕为什么上面会导致失效问题)。
在此先感谢您的时间。
编辑:感谢您的建议。普遍的共识是上面的代码是危险的,但它不会使迭代器失效。我相信我在使用 Visual Studio 2008 调试器时遇到了错误,因为第二天打开项目后,这个无效问题就消失了。所以 - 与计算机中的许多东西一样,如果似乎没有其他东西起作用,请尝试重置它。