Destruktor aufrufen



  • beim durchlaufen einer stl::list moechte ich ein Element aus der Liste entfernen und desen Destruktor aufrufen

    //in stl::list figuren_list sind meine objekte
    //it ist der iterrator 
    if((*it)->life==0){
        figuren_list.erase(it);
        delete &(*it);
    }
    

    beim loeschen kommt ein "Speicherzugriffsfehler"



  • falls in deinem Container ein Zeiegr ist: erst mit new den speicher freigeben, danach den Zeiger aus dem Container raushauen.

    delete *it;
    

    Falls du ganze Objekte in deiner Liste hast, brauchst du garnichts freigeben, dass macht die Liste dann von allein.



  • if((*it)->life==0){
        delete *it;
        figuren_list.erase(it);
    }
    

    so sieht der code jetzt aus 😕 der fehler ist noch da



  • Erst delete, dann den Zeiger aus der Liste entfernen. erase macht den Iterator ungültig.



  • Erst delete, dann den Zeiger aus der Liste entfernen. erase macht den Iterator ungültig.

    Das alleine reicht nicht. Der OP schrrieb ja:

    beim durchlaufen einer stl::list

    Vor dem Aufurf von list::erase muss er sich also noch einen gültigen Iterator besorgen. Andernfalls führt das nachfolgende Inkrementieren von it zu undefiniertem Verhalten.


Anmelden zum Antworten