Speicher Deallokierung durch Obj.erase(); ?



  • Hallo,
    Wird durch den Aufruf von:

    std::string strObj;
    
    strObj.erase(); // hier ?
    

    Speicher freigeben...wenn nein, wie kann ich das bewirken ?

    Thx schonmal



  • Hallo

    Lies dir das durch.

    bei dieser Dekalration bauchst du nichts selber wieder freigeben, das wird automatisch beim Verlassen des Scopes gemacht.

    bis bald
    akari



  • akari schrieb:

    Hallo

    Lies dir das durch.

    bei dieser Dekalration bauchst du nichts selber wieder freigeben, das wird automatisch beim Verlassen des Scopes gemacht.

    bis bald
    akari

    Hi akari,
    Das ich da nix freigeben muss weiß ich, ich will es aber...denn weißt man bspw. dem Objekt einen langen string zu, ist es doch sinnvoll diesen Speicher(bzw den String), wenn er nicht mehr benötigt wird freizugeben...

    Gibt vllt. irgend n 'Akutalisier-Befehl', mit dem man den Speicherverbruach des Stringobjekts dem anktuellen Inhalt anpassen kann ?

    danke schon mal



  • Hallo,
    dann kannst du den string einfach in einen neuen "Block" schreiben.

    { // Blockbeginn
    std::string foo;
    foo = sehr_langer_string;
    // foo wird nicht mehr benoetigt, block kann geschlossen werden und objekt wird zerstoert, speicher freigegeben
    } // Blockende
    

    Moechtest du nachher foo noch weiter nutzen kannst du afaik mit resize verkleinern.
    Vielleicht geht auch einfach

    foo = "";
    

    aber ich wuerde bezweifeln, dass dann wirklich der speicher freigegeben wird. Ist von der Implementierung abhaengig.

    Gruss,
    DeSoVoDaMu



  • Hallo

    wenn du sosehr auf deinen Speicher schaust, dann arbeite eben entweder mit einem Pointer auf std::string, oder gleich ganz mit einem reinem C-String. In beiden Fällen kannst (oder besser gesagt must) du manuell Speicher reservieren und wieder freigeben, wann du willst.

    Denn bei std::string ist es wirklich implementationsabhängig, wann die Instanz innerhalb (nicht am Ende) der lebenszeit Speicher freigibt oder nicht.

    bis bald
    akari



  • Man kann die Freigabe des Speichers forcieren. z.Bsp. so

    string test(100,'e');
    cout << "size " << test.size() << "  capacity " << test.capacity() << endl;
    test = ""; // nur Größe ändert sich, Speicher bleibt
    cout << "size " << test.size() << "  capacity " << test.capacity() << endl;
    string("").swap(test); // Speicher wird auf 0 gesetzt
    cout << "size " << test.size() << "  capacity " << test.capacity() << endl;
    

Anmelden zum Antworten