【发布时间】:2013-04-04 03:14:02
【问题描述】:
我试图从地图中删除指针元素(地图中的值是指针),我在这里看到了代码What happens to an STL iterator after erasing it in VS, UNIX/Linux?
for(map<T, S*>::iterator it = T2pS.begin(); it != T2pS.end(); T2pS.erase(it++)) {
// wilhelmtell in the comments is right: no need to check for NULL.
// delete of a NULL pointer is a no-op.
if(it->second != NULL) {
delete it->second;
it->second = NULL;
}
}
我不确定'delete it->second' 是否取消分配正确的内存,因为erase(it++) 步骤已经将迭代器移动到下一个对象。当它到达 delete 语句时,它指向下一个我们不想删除的元素。我错过了什么吗?
【问题讨论】: