Lösche ich richtig?



  • Hi, ich habe mal eine Frage bezüglich des Löschens von Daten aus meinem Vektor:

    //Vorher schiebe ich Klassen in den Vektor:
    //MeinVektor.push_back(new MeineKlasse());
    for(CMeinVektor::iterator it = MeinVektor.begin(); it<MeinVektor.end(); it++)
    	delete *it;
    

    1. Frage: Lösche ich hier richtig, sodass keine Fehler / Memoryleaks auftreten?
    2. Frage: Wenn ich den die Zeiger aus dem Vektor rauslösche, werden die Felder im Vektor auch gelöscht? Also muss ich nicht noch extra MeinVektor.clear(); bzw. MeinVektor.erase(iter:anfang\_bis\_ende); benutzen?

    mfg m00p



  • Du löschst hier nur Deine Klasse(n). Die Zeiger im Vektor bleiben unverändert erhalten.
    Du mußt also noch clear() für Deinen Vektor aufrufen. Kannst Du leicht feststellen, indem Du mit size() die Größe abfragst.


  • Mod

    Einfacher würdest Du Dir die Sache machen, wenn Du direkt Smart-Pointer verwenden würdest in Deinem vector!



  • Also es enstehen keine Memoryleaks das ist doch schonmal gut. Also ok die Felder im Vektor lasse ich dann auch löschen. Aber: Smartpointer? So oder so, da es ein Spiel ist, muss ich die sowieso immer von Hand löschen. Und beim Applikationsende läuft diese Routine eh immer durch.


  • Mod

    m00p schrieb:

    So oder so, da es ein Spiel ist, muss ich die sowieso immer von Hand löschen. Und beim Applikationsende läuft diese Routine eh immer durch.

    Eben: Bei Smartpointern musst Du nichts mit der Hand löschen...



  • Martin Richter schrieb:

    m00p schrieb:

    So oder so, da es ein Spiel ist, muss ich die sowieso immer von Hand löschen. Und beim Applikationsende läuft diese Routine eh immer durch.

    Eben: Bei Smartpointern musst Du nichts mit der Hand löschen...

    Ja aber ich möchte doch selber bestimmen, wann ich z.B. eine Gegnerinstanz lösche (Energie<0)

    Oder habe ich da jetzt was nicht verstanden? ^^



  • Du KANNST ja auch Dein Objekt zerstören, wenn Du einen Smart-Pointer darauf hast, MUSST es aber nicht mehr verwalten, weil es automatisch zerstört wird, wenn der letzte Smart-Pointer darauf seinen Gültigkeitsbereich verliert, oder dem letzten Smart-Pointer auf ein Objekt die Adresse eines anderen Objektes zugewiesen wird.
    So können keine Memory-Leaks entstehen.



  • Ah sehr schön, jetzt habe ich das verstanden! Danke für eure Hilfe.

    mfg m00p


Anmelden zum Antworten