JuniorДебаггингОчень частоЕщё не отвечали
Что произойдёт, если вернуть ссылку на локальный объект?
Эта функция возвращает ссылку, а вызывающий код читает мусор или периодически падает. Компилятор выдаёт предупреждение под -Wall.
const std::string& greet() {
std::string msg = "hello";
return msg;
}
void use() {
const std::string& r = greet();
std::cout << r << '\n';
}
Найдите ошибку и объясните причину.
Локальный объект уничтожается при возврате из функции. Возвращённая ссылка сразу становится висячей — любое разыменование UB. Компиляторы предупреждают с -Wall.
- ✗Думать, что ссылка 'может' работать, потому что стековая память ещё не была переиспользована — это всё равно UB
- ✗Возвращать
const std::string&из геттера, который строит строку локально — временный объект уничтожается - ✗Не замечать предупреждение компилятора — оно почти всегда правильно указывает на висячие ссылки
- →Как RVO/NRVO устраняет стоимость возврата по значению для больших объектов?
- →Безопасен ли возврат ссылки на
static-локальную переменную в многопоточной программе?