Baseclass call in operator=
-
Hallo zusammen,
wir diskutieren gerade über die Frage, wo denn eigentlich im operator= der Aufruf auf die Methode Baseclass::operator=() hinkommt.
Was ist aus Eurer Sicht besser, Variante a:
Derived & Derived::operator=(const Derived & other){ if(this != &other){ Base::operator=(other); .... } return *this; }oder Variante b:
Derived & Derived::operator=(const Derived & other){ Base::operator=(other); if(this != &other){ .... } return *this; }???
Was sind Eure Meinungen und Argumente? Ich finde Variante a besser, da damit keine "halb kopierten Instanzen entstehen", Kollege ist für b, da man nicht wisse was Base::operator= genau mache.
Gruß und schone einmal Danke für Eure Gedanken.
sven_
-
Eigentlich weder noch, besser ist das Copy-and-swap idiom
Eine genauere Erklärung gibt es z.B. auch unter copy & swap in base and derived class.
Die Selbstzuweisung (wenn die Abfrage überhaupt vorgenommen werden sollte) würde ich dann auch eher mit Variante A implementieren.
-
Wenn du
Base::operator[]aufrufen musst, dann solltest du dir sowieso überlegen was du da eigentlich implementierst.Und was das Argument deines Kollegen angeht: bitte ihn mal ein Beispiel zu nennen, wo es sinnvoll und OK wäre, eine
operator =Funktion auf Selbstzuweisung mit etwas anderem als "no effect" reagieren zu lassen.