Я наткнулся на следующий фрагмент кода
std::string&& test()
{
std::string m="Hello";
return (std::move(m));
}
int main()
{
std::string&& m = test();
}
Я понимаю, что приведенный выше код неверен и небезопасен, но я не уверен, почему. Пока это мое понимание кода. В функции test
в стеке создается локальная переменная
std::string
с именемm
.Затем эта строка возвращается, однако вместо копирования ее содержимое перемещается во временное хранилище. В этот момент функция
test
завершает вызов деструктора переменнойm
(содержимое которого было перемещено во временную папку).Теперь временное значение привязано к ссылке rvalue
m
. И насколько я понимаю, временное будет оставаться в живых до тех пор, пока его объект привязки не будет живым и в области видимости.
Может кто-нибудь, пожалуйста, скажите мне, где я могу ошибаться? Почему приведенный выше код небезопасен?