Copyconstructor unreferenzieren



  • Ich würde gerne in einem Copy-Construktor einen im zu kopierenden Objekt enthaltenen Wert kopieren, ohne darauf zu referenzieren. ( Was mein Code anscheinend macht)

    Mein versuch sieht so aus:

    ...
    //Copy-Konstruktor
    Type(Type& target);
    ...
    
    ...
    //Copy-Konstruktor
    Type::Type(Type& target)
    {
    	Type unref = target;
    
    	Buffer = unref.Buffer;
    };
    ...
    

    Wie bekomme ich die Referenz von target weg?

    LG



  • Man kann Referenzen nicht "wegbekommen". Du solltest dich vielleicht etwas mehr einlesen.

    Ausserdem benutzt du innerhalb des Kopierkonstruktor den Klassen-Zuweisungsoperator, was mehr als unüblich ist.

    Kopierkonstruktoren sehen normalerweise etwa so aus:

    MyClass::MyClass(const MyClass& Origin)  // Const-Referenz - zu kopierendes Element wird nicht verändert.
    : a(Origin.a), b(Origin.b)               // Initialisierungsliste (a, b sind Member)
    {
        // Funktionsrumpf
        std::cout << "Kopierkonstruktor von MyClass wurde aufgerufen." << std::endl;
    }
    


  • Man kann nicht irgendetwas kopieren, noch kann man sonst was damit machen, ohne es - wie auch immer - zu referenzieren. Referenzieren heißt ja nix anderes als Bezug auf etwas zu nehmen.
    Bei Deinem Versuch:

    Type unref = target;

    versuchst Du ja auch schon, target zu referenzieren. Allerdings wird durch diese Anweisung der Kopierkonstruktor (innerhalb des Kopierkonstruktors ist das rekursiv) aufgerufen, was scheitern muß.

    Warum willst Du nicht einfach ganz normal

    //Copy-Konstruktor
    Type::Type(const Type& target)
    {
       Buffer = target.Buffer;
    };
    

    machen?



  • Belli schrieb:

    Warum willst Du nicht einfach ganz normal...machen?

    Ganz normal in C++ wäre es so wie Nexus beschrieben hat, mittels Initialisierungsliste (Und nicht Konstruktion der Member via Standardkonstruktoren und anschließender Zuweisung).



  • Ja, ich probiers dann mit der Initialisierungsliste. stimmt, da hab ich mal wieder nicht dran gedacht, der ruft sich ja selbst auf, das kann ja nur in die Hose gehn 🙄

    Die Referenz "wegbekommen" wollt ich, weil irgendwie Werte verändere, die ich eigentlich kopieren wollte 😕

    Vielen Dank für die Antworten!

    LG


Anmelden zum Antworten