Hallo,
den Ausführungen von Konrad stimme ich zu. Nur eine Sache möchte ich gerne korrigieren.
- wenn Du schon Pointer benutzt, dann initialisiere sie auf nullptr und setze sie nach delete auch immer auf nullptr zurück - das macht die Fehlerdiagnose einfacher!
So ziemlich alle gültigen Anwendungen für new und delete für die ersten zehn Jahre sind in der STL abgehandelt. Für den klassischen Fall gibt es std::unique_ptr<>, für Felder std::vector<> und dann gibt es noch std::shared_ptr<> und std::weak_ptr<> falls man refcounting braucht (das nimmt man nur wenn man absolut keine klare Ownership definieren kann.) (das Stichwort dazu ist "RAII")
- wenn Du eine Referenz zurückgibst machst Du zu 99% einen Fehler, das verbleibende 1% ist zum größten Teil schon von der STL abgedeckt
Ich glaube der häufigste und einfachste Fall für Referenzen die Zurückgegeben werden sind Getter von Klassen, die dürften schon mehr als 1% sein. Aber sonst fällt mir auch nichts normales ein wo die Rückgabe von Referenzen Sinn macht.
- Pointer sind Teufelswerk; Referenzen sind besser aber nicht ganz ungefährlich(*); Value-Typen sind fett und langsam - wähle Dein Gift vorsichtig ;-)
Ab C++17 ist Copy elision bei Return in vielen Fällen für den Compiler pflicht, das mach die Rückgabe von Value-Typen kostenlos, wenn man aufpasst. In den Übrigen fällen, kann move-Semantik (ab C++11) helfen.
Viele Grüße
Jeffrey