Невидимый UB: возвращаем ссылку на локальную переменную
Невидимый UB: возвращаем ссылку на локальную переменную Одна из самых коварных ошибок в C++ — возврат ссылки на переменную, срок жизни которой закончился. Казалось бы, всё компилируется, запускается... и даже иногда "работает". А под капотом — undefined behavior. Пример: const std::string& getName() { std::string name = "John"; return name; // 💥 Возвращаем ссылку на локальный объект } Функция возвращает ссылку на name, но как только getName() завершится, name уничтожается. Ссылка указывает в никуда. Использование этой ссылки: std::cout << getName() << "\n"; // UB: может напечатать мусор, может упасть 👀 Хитрость: такая ошибка часто прячется внутри более сложных функций, и ловится не сразу. Особенно в шаблонном коде или при рефакторинге. 🔒 Как безопасно? * Возвращайте по значению, если объект небольшой или RVO (return value optimization) работает: std::string getName() { std::string name = "John"; return name; // ок, RVO устранит копирование } * Или передавайте результат через параметр: void getName(std::string& out) { out = "John"; } 💡 Профит: избежите UB, багов-призраков и бессонных ночей.