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 und delete zu benutzen. Du könntest direkt std::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 und delete zu benutzen. Du könntest direkt std::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!



  • Nexus schrieb:

    Generell ist es besser, kein new und delete zu benutzen.

    😕



  • @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 manchmal new . Aber delete braucht man so-gut-wie nie.


Log in to reply