我试图从映射中删除指针元素(映射中的值是一个指针),我在这里看到了代码在 VS、UNIX/Linux 中擦除 STL 迭代器后会发生什么情况?
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;
}
}
我不确定“删除它->秒”是否取消分配正确的内存,因为擦除(it++)步骤已经将迭代器移动到下一个对象。当它到达 delete 语句时,它指向下一个我们不想删除的元素。我错过了什么吗?