vector<double> v(2000000) ... Speicher komplett freigeben???
-
Hallo,
wie kann ich den benötigten Speicherplatz von vector<double> v(2000000) wieder komplett freigeben?
-
Im Prinzip garnicht.
Du könntest das Objekt zerstören, allerdings darf IIRC der Allocator den Speicher weiterhin verwenden.
Allerdings könntest du in diesem Fall einfach einen anderen Allocator verwenden
- wobei ich nicht glaube, dass der Standard Allocator den Speicher behalten wird.
Wenn du das Objekt nicht zerstören willst, hilft uU folgendes:
vector<double>(v).swap(v);
-
Den gibt der Vektor automatisch frei. Wenn du ihn schon freigeben willst, bevor der Vektor gelöscht wird, kannst du das hier machen:
vector<double> v(200000); v.swap(vector<double>());
Das konstruiert einen temporären Vektor (der dann leer ist) und tauscht die Daten der beiden Vektoren aus. Der temporäre Vektor wird gelöscht und die Daten mit ihm. Wenn du den Vektor einfach nur resize()-t, bleibt der Speicher ja allokiert.
(Note to self: Das nächste Mal immerhin in die Vorschau gucken...)
-
@operator void
Dein Code ist nicht konform. vector::swap hat als Parameter eine Referenz auf einen vector, d.h. vector::swap erwartet ein lvalue.
Du übergibst aber ein temporäres Objekt (rvalue) und ein solches kann nur an eine Referenz auf const gebunden werden.Lösung:
vector<double>().swap(v);