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
akariHi 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 } // BlockendeMoechtest du nachher foo noch weiter nutzen kannst du afaik mit resize verkleinern.
Vielleicht geht auch einfachfoo = "";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;