new (p) T[size](value);
-
kleiner ausschnitt:
static void construct(T *p, size_type size, const T &value) { new (p) T[size](value); }
warum initialsiert diese funktion das array dessen elemente hier konstruiert werden nicht mit value? wie muss das richtig sein? muss ich das mit einer schleife machen.
-
japro schrieb:
kleiner ausschnitt:
static void construct(T *p, size_type size, const T &value) { new (p) T[size](value); }
warum initialsiert diese funktion das array dessen elemente hier konstruiert werden nicht mit value? wie muss das richtig sein? muss ich das mit einer schleife machen.
ja, schleife.
static void construct(T *p, size_type size, const T &value) { for(size_type i=0;i<size;++i) new (p+i) T(value); }
ist dein code oben überhaupt durch den compiler gegangen? sihet für mich so spanisch aus.
-
jo der lässt sich kompilieren... ich habe die syntax nicht vollständig gekannt (über diese anwendung von new findet man so wenig) und hab dann einfach rumprobiert und bin davon ausgegange, dass es korrekt ist wenn der kompiler es frisst (gcc 3.2). naja danke.
mfg japro
-
japro schrieb:
über diese anwendung von new findet man so wenig
falls es nur am suchwort hängt, "placement new" ist gut.
p: was ist "new (p) T[size](value); " ?
-
hmmm, die schliefe macht genausowenig was ich will wie die andere "lösung"
p.s. bin darauf gekommen weil ich das einfach analog gemacht habe:
T pointer* = new T(value); new (pointer) T(value); //in placement version
daher dachte ich mit
T pointer* = new T[size](value); new (pointer) T[size](value);
würde das auch funktionieren
ist aber gut möglich, dass ich da allgemein was verkehrt mache. hab den code irgendwo auf der festplatte ausgegraben und wollte mich mal wieder damit beschäftigen.
-
Was willst du überhaupt machen? Ein Array mit new erstellen? So n Konstrukt ist mir noch nie begegnet?
Edit:
Ahhh jetzt versteh ichs das Konstrukt erst
-
Sei froh und dankbar
Hilft std::uninitialized_fill aus <memory> hier? Das macht ungefähr das, was volkard gesagt hatte, nur Exception-sicher. Aber wenn du eh was anderes als Volkard meintest, was meintest du dann überhaupt? Ich hatte es auch so verstanden wie er
-
ne is alles in ordnung volkard hat das schon richtig gemeint... ich hatte noch einen zweiten fehler der den selben effekt erzeugt hat...
danke