Пожалуйста, рассмотрите следующий сценарий:
map(T,S*) & GetMap(); //Forward decleration
map(T, S*) T2pS = GetMap();
for(map(T, S*)::iterator it = T2pS.begin(); it != T2pS.end(); ++it)
{
if(it->second != NULL)
{
delete it->second;
it->second = NULL;
}
T2pS.erase(it);
//In VS2005, after the erase, we will crash on the ++it of the for loop.
//In UNIX, Linux, this doesn't crash.
}//for
Мне кажется, что в VS2005 после "стирания" итератор будет равен end(), отсюда и сбой при попытке его инкрементировать. Действительно ли существуют различия между компиляторами в представленном здесь поведении? Если да, то чему будет равен итератор после "стирания" в UNIX/Linux?
Спасибо...