Initialisierungsliste bei Arrays
-
Hmm... hab 'n bißchen probiert. Schätze mal das geht nur mit 'nem dynamischen Array.
Edit : Doch kein dynamisches Array... wenn man noch keine Ahnung hat sollte man einfach die Schnauze halten. Eine Lösung, siehe unten.
-
Ich hab mir gestern mal ein bißchen den Kopf zerbrochen, wie das gehen könnte und hab diese Lösung gefunden :
#include <iostream> using namespace std; class X { public: const int wert; X(int val) : wert(val) {} }; void main() { X * feld[5] = {new X(3), new X(5), new X(7), new X(9), new X(10)}; // Belegung mit Werten über Parameterliste cout << feld[0]->wert << feld[4]->wert; // Ausgabe des 0. und des 4. Wertes return 0; }
Sowas in der Art hattest Du doch gemeint, oder?
-
FrodoSix, mich würde interessieren wer den Speicher wieder freigibt, den Du gerade mit new allokiert hast?
-
Das war ja nicht die Frage... das können mal andere austüfteln...
Ich schätze ich hab in letzter Zeit zu viel Java programmiert, so daß ich mir darüber keine Gedanken gemacht hab.
Kann nicht mal jemand 'nen Garbage Collector für C++ programmieren?!?Edit :
Wie wär's so :... delete feld[0]; delete feld[1]; delete feld[2]; ...
-
FrodoSix schrieb:
Wie wär's so :
wie waere es ohne new?
ich sehe keinen grund hier den heap zu verwenden.
-
Und wie genau sonst (ich meine Code mäßig). Klar, man könnte auch alle Objekte vorher einzeln erzeugen und dann ins Array kopieren, aber das find ich umständlicher, zumal Du dann alle Objekte 2 mal hast (einmal als einzelnes Objekt und einmal im Array). Du müßtest dann auch irgendwie alle einzelnen Objekte "verschwinden lassen".
Zudem soll ja gerade das verhindert werden... die Objekte sollen beim Erzeugen des Arrays erzeugt und initialisiert werden.Oder hast Du noch 'ne ganz anderere Idee?
-
X feld[5] = {X(3), X(5), X(7), X(9), X(10)};
was spricht da dagegen?
-
Na gut, überredet :p
Wieso einfach, wenn's auch kompliziert geht
-
Wie wär's so :
delete feld[0]; delete feld[1]; delete feld[2];
Vielleicht ein Fall für 'ne Schleife.
-
geht delete[] feld; nicht ?
-
deii schrieb:
geht delete[] feld; nicht ?
delete[] löscht ein feld das mit new() angelegt wurde. In diesem Fall wurden aber die einzelnen Elemente des Feldes mit new angelegt und nicht das Feld selber.
-
Geht die Init-Liste eigentlich auch mit vector<X>? Beispiel?
-
Erhard Henkes schrieb:
Geht die Init-Liste eigentlich auch mit vector<X>?
Nee, normalerweise macht man etwas wie
T const dummy[] = { a, b, c, d, e, f }; vector<T> v(dummy, dummy + sizeof dummy/sizeof *dummy;);