Что лучше по умолчанию, чтобы вернуть копию (1) или ссылку (2) из функции getter?
class foo {
public:
std::string str () { // (1)
return str_;
}
const std::string& str () { // (2)
return str_;
}
private:
std::string str_;
};
Я знаю 2) может быть быстрее, но не обязательно из-за (N) RVO. 1) более безопасен в отношении оборванных ссылок, но объект, вероятно, будет удален из жизни или ссылка никогда не будет сохранена.
Что вы делаете по умолчанию при написании класса и не знаете (еще), важны ли вопросы производительности и времени жизни?
Дополнительный вопрос: меняется ли игра, когда элемент не является простой строкой, а скорее вектором?