Warum benötigen Sie Kopierkonstruktoren in C ++

Der Konstruktor ist eine spezielle Funktion, die C ++ ruft automatisch, wenn ein Objekt erstellt wird, das Objekt zu ermöglichen, sich selbst zu initialisieren. Es gibt zwei besondere Varianten des Konstruktor bekannt als Kopieren und Umzug Bauer.

Eine Kopie Konstruktor ist der Konstruktor, C ++ verwendet Kopien von Objekten zu machen. Sie trägt den Namen X :: X (const X), woher X ist der Name der Klasse. Das heißt, es ist der Konstruktor der Klasse X, die als Argument einen Verweis auf ein Objekt der Klasse X. Das klingt wirklich nutzlos, sondern nehmen nur eine Minute zu erkunden, warum C ++ solche Tierchen muss.

Denken Sie einen Moment über das, was passiert, wenn Sie eine Funktion wie folgt aufrufen:

Leere fn (Student fs) {// ... gleichen Szenario- anderes Argument ...} int main (int argcs, char * pargs []) {Schüler ms-fn (ms) -return 0-}

In dem Aufruf fn (), C ++ übergibt eine Kopie des Objekts Frau und nicht das Objekt selbst.

Betrachten wir nun, was es bedeutet, eine Kopie eines Objekts zu erstellen. Erstens dauert es einen Konstruktor ein Objekt zu erstellen, auch eine Kopie eines bestehenden Objekts. C ++ könnte eine Standard-Copy-Konstruktor, die Kopien das vorhandene Objekt in das neue Objekt ein Byte zu einem Zeitpunkt erstellen.

Das ist, was ältere Sprachen wie C tun. Aber was, wenn die Klasse nicht wollen, eine einfache Kopie des Objekts? Was ist, wenn etwas anderes ist erforderlich? (Ignorieren Sie die # 147-warum? # 148- für eine kleine Weile.) Die Klasse muss in der Lage sein, genau zu bestimmen, wie die Kopie erstellt werden soll.

Somit verwendet C ++ eine Kopie Konstruktor im vorherigen Beispiel eine Kopie des Objekts zu erstellen Frau auf dem Stapel während der Aufruf der Funktion fn (). Diese besondere Kopierkonstruktors wäre Student :: Student (Student) - schnell sagen, dass dreimal.

Menü