这是我的代码:
void SurfaceManager::SurfaceManagerDelete()
{
for(map<string,SurfaceManager*>::iterator Iter = SurfaceList.begin(); Iter != SurfaceList.end(); ++Iter)
{
delete (*Iter).second;
(Iter) = SurfaceList.erase(Iter);
}
SurfaceList.clear();
}
为什么当我用 VLD 扫描它时会导致多次内存泄漏?我知道这与我从元素中删除内存的方式有关,特别是这一行“(Iter)= SurfaceList.erase(Iter);”,但我想知道为什么,以及我应该如何从列表中正确删除元素。
最佳答案
问题出在 for 循环中的++Iter。那是因为
(Iter) = SurfaceList.erase(Iter);
已经更新 Iter 以指向被删除元素之后的元素,就像一个增量。
所以++Iter 然后跳过另一个元素,实际上你最终删除了所有其他元素!
关于c++ - 遍历映射并删除动态分配的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12555773/