Wieder der Copy-Konstruktor
-
ConfusedGuy schrieb:
wenn ich mich nicht täusche MUSS der CopyConst diese Signatur haben.
Klasse::Klasse( const Klasse& src){}
Du täuschst dich. Korrekt ist, dass der Copy-Ctor einen Referenz-Parameter erhalten muss. Dabei ist aber egal, ob das Ziel der Referenz als const, volatile, const volatile oder nichts von alledem angesehen werden soll.
wäre es nämlich keine reference sondern ein call by value würdest du das objekt erstmal beim übergeben kopieren und dann nochmals innerhalb deines kopierkonstruktors.
[...]
und nun male dir mal aus weöche performance auswirkungen es hätte jedesmal alle objekte 2 mal zu kopieren...Es käme noch viel schlimmer, da du nicht zweimal sondern bis in alle Ewigkeit kopieren würdest. Beim "by value"-Aufruf wird eine Kopie erzeugt. Für das Erzeugen einer Kopie wird der Copy-Ctor verwendet. Würde der Copy-Ctor seinen Parameter "by value" übernehmen, müsste beim Aufruf des Copy-Ctors erstmal wieder eine Kopie erzeugt werden. Das würde wieder den Copy-Ctor aufrufen, wobei wieder eine Kopie erzeugt werden müsset, was wieder den Copy-Ctor aufrufen würde... und so weiter ...
-
ah gut, dann habe ich ja auch noch was gelernt

danke
-
und ich auch. danke.

-
HumeSikkins schrieb:
...
Es käme noch viel schlimmer, da du nicht zweimal sondern bis in alle Ewigkeit kopieren würdest....Schön, habe ich also recht vermutet. (Habe ich aber noch nirgendwo gelesen ... sollte man vielleicht mal aufschreiben).
Gruß,
Simon2.
-
-
HumeSikkins schrieb:
@Simon2
Ist ja letztlich irrelevant, da eine Signatur wie:Foo(Foo f);schlicht nicht erlaubt ist.
Aber ich finde es immer besser, wenn ich einen konkreten Grund sehe, warum etwas nicht erlaubt ist. Kann ich mir einfach leichter merken, wenn es plausibel ist.
Gruß,
Simon2.