Ein Problem für die Rückgabe der const-Referenz wäre, wenn der Benutzer Folgendes codiert:
const std::string & str = myObject.getSomeString() ;
Bei einer std::string
Rückgabe würde das temporäre Objekt am Leben bleiben und an str angehängt, bis str den Gültigkeitsbereich verlässt.
Aber was passiert mit einem const std::string &
? Ich vermute, dass wir einen konstanten Verweis auf ein Objekt haben würden, das sterben könnte, wenn sein übergeordnetes Objekt die Zuordnung aufhebt:
MyObject * myObject = new MyObject("My String") ;
const std::string & str = myObject->getSomeString() ;
delete myObject ;
Meine Präferenz gilt also der Konstantenreferenzrückgabe (da ich mit dem Senden einer Referenz ohnehin nur bequemer bin als zu hoffen, dass der Compiler die zusätzliche temporäre Option optimiert), solange der folgende Vertrag eingehalten wird: "Wenn Sie ihn darüber hinaus wünschen Die Existenz meines Objekts kopieren sie vor der Zerstörung meines Objekts. "