Objektdaten kopieren?
-
Hallo.
ich habe folgendes Problem:
Ich habe 2 Objekte. In einem vector vec<obj*> sind nur die Referenzen auf die Objekte gespeichert.Jetzt nehme ich mal an, in dem Vector sind 2 Objekte referenziert. Ich möchte ein 3. dem Vector hinzufügen:
obj* obNew = new obj("hallo");
vec.push_back(obNew);Soweit so gut.
Jetzt möchte ich aber sämtliche Membervariablewerte von bspw. vec[2] nach vec[3] kopieren.Ich habe es mit vec[3] = vec[2] probiert. Natürlcih wird dann nur die zeigeradresse geändert und nun zeigen sowohl vec[2], als auch vec[3] auf das 2. object des vectors.
Wie bekomme ich jetzt also ein kopieren der Membervariablen hin?
Benötige ich dazu den copyconstructor?Bin für jeden Tip dankbar.
-
SelfischCatcher schrieb:
Ich habe 2 Objekte. In einem vector vec<obj*> sind nur die Referenzen auf die Objekte gespeichert.
Zeiger
SelfischCatcher schrieb:
Soweit so gut.
Generell ist es besser, kein
new
unddelete
zu benutzen. Du könntest direktstd::vector<obj>
nehmen, oder falls du Polymorphie benötigst,std::vector<std::unique_ptr<obj>>
.SelfischCatcher schrieb:
Wie bekomme ich jetzt also ein kopieren der Membervariablen hin?
Benötige ich dazu den copyconstructor?Dereferenziere die Zeiger, um an die Werte der Objekte zu kommen. Und achte auf die Indizes, das dritte Element hat Index 2.
*vec[2] = *vec[1];
Kopierkonstruktor und Zuweisungoperator musst du nur selbst implementieren, falls die compilergenerierten nicht das Richtige tun.
-
Super, das funktioniert
Nexus schrieb:
SelfischCatcher schrieb:
Soweit so gut.
Generell ist es besser, kein
new
unddelete
zu benutzen. Du könntest direktstd::vector<obj>
nehmen, oder falls du Polymorphie benötigst,std::vector<std::unique_ptr<obj>>
.Kannst du mir noch einmal genauer erläutern, was du da meinst?
Danke schon mal!
-
-
@Singender Holzkübel
Hast du auch ne Frage?Weil ... also die Aussage von Nexus ist schon OK. Wenn man kein
make_shared
/make_unique
zur Verfügung hat braucht man noch manchmalnew
. Aberdelete
braucht man so-gut-wie nie.