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.)