Возврат ссылки на поле без ошибок
От: _NN_ www.nemerleweb.com
Дата: 20.05.19 07:00
Оценка:
Простые случае можно решить так:
  • Если объект временный то перемещаем, все равно он умрёт.
  • Если объект не временный то спокойно возвращаем ссылку.

    class A
    {
    public:
        std::string getI() &&
        {
            return std::move(i);
        }
    
        std::string const& getI() &
        {
            return i;
        }
    
    private:
        std::string i{ "xyz" };
    };
    
    int main()
    {
        std::cout << A().getI();  // OK, moves the value
    
        std::string const& rvalueI = A().getI();  // OK, extends lifetime of returning value
        std::cout << rvalueI;
    
        A a;
        std::string const& lvalueI = a.getI(); // OK, lvalue return reference
        std::cout << lvalueI;
    }


    Однако это не решает проблемы возврата ссылки из функции:
    std::string const& q()
    {
        A a;
        return a.getI();
    }


    Есть ли способ предотвратить такую ошибку ?
  • http://rsdn.nemerleweb.com
    http://nemerleweb.com
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.