マップからポインター要素 (マップ内の値はポインター) を消去しようとしていて、ここでコードを見ました 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;
}
}
'delete it->second' が正しいメモリの割り当てを解除するかどうかはわかりません。これは、erase(it++) ステップが既にイテレータを次のオブジェクトに移動しているためです。delete ステートメントに到達するまでに、削除したくない次の要素を指しています。何か不足していますか?