Задать вопрос
@Ptax

Почему программисты не любят возврат константных ссылок в C++?

Просматривая чужой код, обратил внимание на то, что почти никто при написании геттеров не использует возврат константной ссылки на приватный член класса. Что самое странное, это касается не только проектов с длинной историей, но и относительно свежих работ. Ведь, по идее, возврат ссылки значительно менее ресурсозатратная операция, особенно если речь идет не о тривиальных объектах, а о более-менее сложных структурах.
Как вы считаете, насколько хорош нижеследующий код? Если вы считаете, что он плох, пожалуйста напишите почему. Возможно в таком подходе есть невидимые для меня "подводные камни"? Спасибо.

#include <string>
#include <iostream>

class Foo{
public:
    Foo(const char* str)
        : m_value(str)
    {
    }

    const std::string& value() const{
        return m_value;
    }
private:
    std::string m_value;
};

int main(int argc, char** argv)
{
    if(argc < 1)
        return -1;

    Foo foo(argv[0]);

    auto&& bar = foo.value();
    std::cout << bar << std::endl;
    /* ... */

    return 0;
}
  • Вопрос задан
  • 2569 просмотров
Подписаться 2 Оценить Комментировать
Ответ пользователя AtomKrieg К ответам на вопрос (8)
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
После уничтожения объекта ссылка не валидна и не важно какая ссылка - константная или нет. В общем случае возврат ссылки рекомендован только на статик мембер класса. С сырым указателем такая же ситуация.
Используйте weak_ptr (перед каждым использованием надо проверять на expired) или shared_ptr для возврата из функций.
Ответ написан