Ce qui arrive à une STL itérateur après l'effacement de VS, UNIX/Linux?

Veuillez considérez le scénario suivant:


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

Il me semble que dans VS2005, après les "effacer", l'itérateur sera égal à la fin(), d'où le crash lors de la tentative de l'incrémenter.
Y a t il vraiment des différences entre les compilateurs dans le comportement présenté ici?
Si oui, quel sera l'itérateur après les "effacer" l'égalité dans UNIX/Linux?

Merci...

OriginalL'auteur Gal Goldman | 2009-01-11