Copyconstructor



  • hallo leute

    habe mir viele tutorials zu dem copy-konstruktor durch gelesen. Nur verstehe immer noch nicht warum ich einen copy-konstruktor brauche und wie ich ihn anwende...



  • Anwendung:

    Foo instanz;
    
    Foo kopie (instanz); // hier
    

    Oder:

    void bar (Foo foo)
    {
       ...
    }
    
    Foo foo;
    
    bar(foo); // hier
    

    Wann du ihn Brauchst? Wann immer du eine Tiefenkopie brauchst, z.B. wenn du intern dynamischen Speicher verwaltest.



  • Der Copy-Konstruktor wird immer dann aufgerufen, wenn du eine Kopie eines Objektes machst, also wenn du einer Funktion ein Argument by-value übergibst, oder sie einen Wert by-value zurückgibt. Und natürlich, wenn du ein Objekt mit einer Instanz vom selben Typ initialisierst.

    class A { ... };
    void f(A a);
    A g() {
      A a;
      return a;
    }
    
    int main() {
      A a;
      A b(a); // b ist eine Kopie von a
      f(a); // an f wird eine Kopie von a übergeben
      b = g(); // g gibt eine Kopie der erstellten Instanz zurück (diese wird dann an b zugewiesen => Aufruf des Copy-Zuweisungsoperators)
    }
    

    Der Copy-Konstruktor und der Copy-Zuweisungsoperator werden immer automatisch erzeugt, wenn man selbst keinen definiert. Wenn man das Verhalten bei einer Kopie oder Zuweisung selbst definieren will, schreibt man einen eigenen Kopierkonstruktor bzw. -zuweisungsoperator. Das ist als Faustregel immer dann, wenn man einen Destruktor braucht.

    (PS: Viel hilft viel oder wie? Lies lieber ein gutes Buch als viele Tutorials.)


Anmelden zum Antworten