Konstruktor und Array
-
Hallo,
ich habe einen Konstruktor, zB. Test(string name).
Jetzt möchte ich davon eine Array anlegen.
Test *test = new Test[5];
Mein Problem ist das ja kein Standardkonstruktor verfügbar ist.
Wie kann ich für das Feld den Platz reservieren aber trotzdem keinen string name festlegen?
-
Hallo
In C++ am besten so
#include <vector> ... std::vector<Test> array(5, "Hallo");oder du gibst dem Konstruktor-Parameter noch einen Default Value
Test(string name = "")bis bald
akari
-
Array mit rohem Speicher erstellen und über placement new die Objekte erstellen.
char array[sizeof(T)*x]; T* arr=(T*)array; for(int i=0;i<x;++i) { new(arr+i)(value); }so in etwa aus dem gedächtnis gehackt...
-
Shade Of Mine schrieb:
Array mit rohem Speicher erstellen und über placement new die Objekte erstellen.
char array[sizeof(T)*x]; T* arr=(T*)array; for(int i=0;i<x;++i) { new(arr+i)(value); }so in etwa aus dem gedächtnis gehackt...
Hier (bei statischen oder automatischen Variablen - bei new char[..] ist das kein Problem) muss allerdings auf Alignment geachtet werden.
boost::aligned_storage<sizeof(T)*x,boost:: alignment_of<T> > array; T* arr=(T*)array; for(int i=0;i<x;++i) { new(arr+i)(value); }Ich habe allerdings Zweifel, dass das eine geeignete Lösung ist. std::vector liegt näher.
-
C++ Neuling schrieb:
ich habe einen Konstruktor, zB. Test(string name).
2 kleine Anmerkungen die jetzt nichts mit der Frage zu tun haben, aber sich anhand deines Konstruktorbeispieles herleiten lassen:
1. Niemals using namespace in einem Header verwenden!
2. Objekte nicht "per Value" übergeben, sondern als konstante ReferenzSprich statt ...
Test(string name);
... sollte es ...
Test(const std::string& name);
... lauten.
-
Danke für die Hilfe, habe das Problem mit einem Vector gelöst.