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