Standard Zuweisung?
-
Hallo,
muss ich für eine Klasse einen
operator =definieren, wenn dieser nichts andereres tut als alle Variablen zu kopieren?
-
nein.
-
daersc schrieb:
Hallo,
muss ich für eine Klasse einen
operator =definieren, wenn dieser nichts andereres tut als alle Variablen zu kopieren?nö
-
danke
das ging aber rasch
-
Wenn es dir aber um Exceptionsicherheit geht, kann es sich lohnen, den Zuweisungsoperator über Copy&Swap zu implementieren. Mehr dazu findest du in diesem Thread.
-
-
Wie soll das Konzept von Copy&Swap funktionieren? Das leuchtet mir noch nicht so recht ein...
-
Wieso sollte es nicht sicher sein einfach alle Werte zu kopieren?
-
-
daersc schrieb:
- Wie soll das Konzept von Copy&Swap funktionieren? Das leuchtet mir noch nicht so recht ein...
Hast du den verlinkten Thread gelesen? Dort wird alles recht gut erklärt.
daersc schrieb:
- Wieso sollte es nicht sicher sein einfach alle Werte zu kopieren?
Bei
intund kleinen Klassen ist das noch nicht relevant. Aber grundsätzlich können Kopien fehlschlagen, zum Beispiel wenn der Konstruktor eine Exception wirft. Bei grösseren Klassen und Ressourcenverwaltung gewinnt Exceptionsicherheit zunehmend an Bedeutung.
-
daersc schrieb:
- Wie soll das Konzept von Copy&Swap funktionieren? Das leuchtet mir noch nicht so recht ein...
Foo& operator=(const Foo& foo){ Foo neu(foo); swap(*this,neu); return *this; }daersc schrieb:
- Wieso sollte es nicht sicher sein einfach alle Werte zu kopieren?
Foo& operator=(const Foo& foo){ a=foo.a; b=foo.b;//peng! hier fliegt ne exception. c=foo.c; }der aufrufer hat jetzt ein halbkaputtes zuweisungsziel in der hand. nicht gut. wenn ne exception fliegt, sollte das alte objekt auch das alte geblieben sein.