Kopierkonstruktor
-
Hallo,
folgendes in wikipedia gelesen.
Der Kopierkonstruktor übernimmt eine konstante Referenz, denn sonst müsste er ja (implizit) aufgerufen werden, bevor er aufgerufen wird!
Also dass er eine Referenz übernimmt ist mir klar, da sonst glei Kopierarbeit
anstünde. und const könnt ich mir damit erklären da ja nur lesend zugegriffen
werden soll. Jedenfalls versteh ich den satz in wikipedia nicht
-
Ich nehme an, dass Wikipedia (wie Du schon richtig vermutet hast) auf den Unterschied pass-by-ref. und pass-by-value und nicht const / non-const anspielt.
Simon
-
Ob der Copyconstructor eine const oder eine normale Referenz entgegennimmt ist deine Entscheidung beim Implementieren. Toll, oder?
-
So ne konstante Referenz ist aber schon was Praktisches, wenn du auch Folgendes machen willst:
const MyClass foo; MyClass bar(foo);
-
blurry333 schrieb:
Hallo,
folgendes in wikipedia gelesen.
Der Kopierkonstruktor übernimmt eine konstante Referenz, denn sonst müsste er ja (implizit) aufgerufen werden, bevor er aufgerufen wird!
Also dass er eine Referenz übernimmt ist mir klar, da sonst glei Kopierarbeit
anstünde. und const könnt ich mir damit erklären da ja nur lesend zugegriffen
werden soll. Jedenfalls versteh ich den satz in wikipedia nichtDer Kopierkonstruktor wird (wie der Name schon sagt) immer aufgerufen, wenn du ein Element der Klasse kopierst. Beispiel:
string a = "LOL"; string b = a; //hier wird kopiertÜbergibst du keine Referenz an deinen Kopierkonstruktor, müsste das Element für den Parameter kopiert werden und somit bräuchtest du den Kopierkonstruktor, damit das Element an den Kopierkonstruktor übergeben werden kann (Ich hoffe, es ist halbwegs verständlich
)
-
wxSkip schrieb:
string b = a; //hier wird kopiertStand das im A-Z-Buch?
-
volkard schrieb:
wxSkip schrieb:
string b = a; //hier wird kopiertStand das im A-Z-Buch?
Pfff... ich meine, es wird der Kopierkonstruktor aufgerufen, natürlich wird nicht 1:1 kopiert, sonst würden die char* im string auf den selben Speicherbereich zeigen.