| 

.NET C# Java Javascript Exception

Antwort #A436 zur Frage #F117: Muss ich Variablen auf dem Stack mit delete freigeben?

Diese Antwort hat bisher 3 Versionen. Frage #F117: Muss ich Variablen auf dem Stack mit delete freigeben? - Antwort #A436


Version 3
08.09.2009 07:15:44
Dies ist die aktuelle Version
Es ist komplett falsch den delete in dem Fall aufzurufen! Als Ergänzung:

  • MeinObject mo("abc");
    auf dem Stack alloziert NIE delete aufrufen (der Destruktor kümmert sich darum)

  • MeinObject* mo = new MeinObject("abc");
    auf dem Heap alloziert -> mit
    delete mo;
    freigeben (nicht Ausnahmesicher! Lieber std::auto_ptr verwenden)

  • MeinObject* mo = new MeinObject[10];
    array auf dem Heap -> mit
    delete [] mo;
    freigeben ohne eckige Klammern wird sonst nur den Destruktor fürs erste Object aufgerufen was ein Speicherleck hervorrufen könnte!
jdehaan 424 1 7
Version 2
08.09.2009 07:15:44
Wie gfoidl sagte ist es komplett falsch den delete in dem Fall aufzurufen! Ich wollte nur noch dies hinzufügen als Ergänzung:

  • MeinObject mo("abc");
    auf dem Stack alloziert NIE delete aufrufen (der Destruktor kümmert sich darum)

  • MeinObject* mo = new MeinObject("abc");
    auf dem Heap alloziert -> mit
    delete mo;
    freigeben (nicht Ausnahmesicher! Lieber std::auto_ptr verwenden)

  • MeinObject* mo = new MeinObject[10];
    array auf dem Heap -> mit
    delete [] mo;
    freigeben ohne eckige Klammern wird sonst nur den Destruktor fürs erste Object aufgerufen was ein Speicherleck hervorrufen könnte!
jdehaan 424 1 7
Version 1
07.09.2009 13:46:33
Wie gfoidl sagte ist es komplett falsch den delete in dem Fall aufzurufen! Ich wollte nur noch dies hinzufügen als Ergänzung:

  • MeinObject mo("abc");
    auf dem Stack alloziert NIE delete aufrufen (der Destruktor kümmert sich darum)
  • MeinObject* mo = new MeinObject("abc");
    auf dem Heap alloziert -> mit "delete mo;" freigeben (nicht Ausnahmesicher! Lieber std::auto_ptr verwenden)
  • MeinObject* mo = new MeinObject[10];
    array auf dem Heap -> mit "delete [] mo;" freigeben ohne eckige Klammern wird sonst nur den Destruktor fürs erste Object aufgerufen was ein Speicherleck hervorrufen könnte!
jdehaan 424 1 7