Wenn dir #14 nicht als Erklärung reicht. Aber als Hinweis für Polymorphismus: Splicing.
Referenzen sehen aus wie Objekte, sind es aber nicht. Und das führt oft zu subtilen Fehlern, die man nur schwer sieht. Dass Referenzen null/Müll sind, kommt aber gerne vor, weil es eben so einfach geht.
Und Referenzen können nicht mit den Containern. Sie sind auch nicht default-constructible. Im Factory-Pattern kannst du nicht mal prüfen, ob du nen nullptr hast, oder ihn zurückgeben.
Einziger Ausweg scheint mir hier eine Exception zu sein. Aber ist das dann noch wirklich schön?
Mir ist natürlich klar, dass "->" zwei Tastendrücke auf dem IBM-Keyboard sind statt mit "." nur einen.
Referenzen sehen aus wie Objekte, sind es aber nicht. Und das führt oft zu subtilen Fehlern, die man nur schwer sieht. Dass Referenzen null/Müll sind, kommt aber gerne vor, weil es eben so einfach geht.
Und Referenzen können nicht mit den Containern. Sie sind auch nicht default-constructible. Im Factory-Pattern kannst du nicht mal prüfen, ob du nen nullptr hast, oder ihn zurückgeben.
Code:
std::pair<bool,Base&>DerivedFactory(...);//first is true on success
...
[success, obj]=DerivedFactory(...);//What happens on failure
Mir ist natürlich klar, dass "->" zwei Tastendrücke auf dem IBM-Keyboard sind statt mit "." nur einen.