Was passiert mit einem STL iterator ist nach dem löschen ist es im VS, UNIX/Linux?

Bitte betrachten Sie das folgende Szenario:


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

Es scheint mir, dass in VS2005, nach dem "erase", der iterator wird gleich zu Ende(), daher der Absturz beim Versuch zu erhöhen es.
Gibt es wirklich Unterschiede zwischen Compilern in das Verhalten hier vorgestellt?
Wenn ja, was wird der iterator nach dem "löschen" gleich in UNIX/Linux?

Dank...

InformationsquelleAutor Gal Goldman | 2009-01-11
Schreibe einen Kommentar