Dynamische Speicheralloktion|Mehrdimensionales Array und Stringklasse



  • Ich hab ein paar fragen zur Speicheralloktion mit new[] und delete[] in Mehrdimensionalen Arrays und der Stringklasse.

    Muss man bei mehrdimensionalen Arrays jedes Unterelement einzeln deleten bevor man das komplette Array deletet?

    //str ist ein mehrdimensionales array mit new erzeugt
    
    str[2][4] = 'c';
    
    for (int j = 0; j < _ersteDim; j++){
      delete [] str[j] ;
    }
    delete [] str;
    

    Da eine Instanz der Stringklasse, glaub ich jedenfalls, auch ein Array ist... muss ich sie speziell einzeln deleten, wenn ich sie zum Beispiel in einem Array in einer Klasse verwende.

    class sample{
    string *beispiel;
    
    sample(){
    beispiel = new string[2];
    beispiel[0] = "TEST";
    beispiel[1] = "BEISPIEL";
    }
    ~sample(){
    //soll ich jetzt alles einzeln deleten oder kann ich einfach delete [] beispiel 
    //machen oder muss ich den destruktor von der stringklasse aufrufen
    //http://www.cplusplus.com/reference/string/string/ hier steht nix darüber
    }
    };
    


  • Razor123 schrieb:

    //str ist ein mehrdimensionales array mit new erzeugt
    

    Ich nehm aber mal sowas an (wobei T für einen Typen steht), nächstes Mal bitte genau sagen, wie. 😉

    T** Ptr = new T[Width];
    for (size_t i = 0; i < Width; ++i)
        Ptr[i] = new T[Height];
    

    In diesem Falle musst du entsprechend in umgekehrter Reihenfolge freigeben. Für jedes new ein delete und jedes new[] ein delete[] .

    for (size_t i = 0; i < Width; ++i)
        delete[] Ptr[i];
    delete[] Ptr;
    

    Es sei noch angemerkt, dass es in C++ hilfreiche Klassen gibt, die einem die Speicherverwaltung abnehmen. Vielleicht willst du dir dazu den Artikel über die STL anschauen.



  • genau so hab ich das gemeint ^^

    gut danke ...

    hab inzwischen auch raus das die c++-stl-string-arrays nur mit delete[] deletet werden müssen ^^



  • Razor123 schrieb:

    c++-stl-string-arrays nur mit delete[] deletet werden müssen ^^

    Was meinst du? Der Begriff STL scheint hier fehl am Platz zu sein...


Anmelden zum Antworten