Одна проблема для возврата константной ссылки будет, если пользователь закодирует что-то вроде:
const std::string & str = myObject.getSomeString() ;
При возврате std::string
временный объект будет оставаться живым и прикрепляться к str, пока str не выйдет из области видимости.
Но что происходит с const std::string &
? Я предполагаю, что у нас будет постоянная ссылка на объект, который может умереть, когда его родительский объект освободит его:
MyObject * myObject = new MyObject("My String") ;
const std::string & str = myObject->getSomeString() ;
delete myObject ;
// Use str... which references a destroyed object.
Таким образом, я предпочитаю возврат константной ссылки (потому что, в любом случае, мне просто удобнее посылать ссылку, чем надеяться, что компилятор оптимизирует дополнительные временные), если соблюдается следующий контракт: хотят, чтобы это было за пределами существования моего объекта, они копируют его до уничтожения моего объекта "