new und delete
-
Hallo
Ich weiss wie ich Speicher mit new reservieren kann, aber nicht wie ich einige Elemente des Arrays wieder freigeben kann, ohne den ganzen Array mit delete[] zu löschen.
-
Das kannst du auch nicht.
Würde sowieso nur :xmas2: den Speicher fragmentieren.Vielleicht wärst :xmas1: du mit einem yector besser bedient?
-
das kannst du bei Arrays nicht anders machen, da der Speicher immer in einem Block allokiert bzw. freigegeben werden muss.
Wenn du innerhalb von einem Continer viel hinzufügen/löschen willst, solltest du dir lieber mal Listen angucken.
In C++ gibt es übrigens Klassen für so etwas: std::list bzw. std::vector
http://www.sgi.com/tech/stl/table_of_contents.html
-
erstmal danke für die Antworten.
Ich probierte mal was mit Vektoren, kriege jedoch bei der Ausführung allerdings einen segmentation fault:Class Test { public: Test(short s) {a.reserve(10); a[0]=s;} void add(Test t) {a[0]+=t.a[0];} // Fehler? vector <short> a; ... }
int main() { Test a(32); Test b(23); a.add(b); return 0; }
-
Hmm,
nicht so wirklich schöne Anwendung eines Vectors.
Überhaupt nicht schön. :xmas2:Du verwechselst Kapazität mit Größe des Arrays.
Reserve schafft nur genügend Platz im voraus, es fügt dem Vector aber noch keine Elemente hinzu.Die musst du mit a.push(s); hinzufügen.
-
ach so!
(allerdings heisst die Funktion push_back())