Нарисуйте словами сроки жизни локальных объектов и возвращаемых ссылок
Зачем
Зачем это нужно
Сопоставьте возврат значения, заимствование и передачу владения
Подберите проверки для выхода за границы и использования освобождённой памяти
Вопросы
Частые вопросы
Какой пример отправить для разбора времени жизни C++?
Объясни C++: const std::string& name(){std::string s="енот"; return s;} Где возникает висячая ссылка? Предложи возврат std::string по значению без ручного new/delete, укажи заголовки и пример вызова. Объясни, что проверить предупреждениями компилятора и доступными санитайзерами. Не заявляй, что программа проверена запуском.
Что указать перед разбором шаблона или указателя?
Приведите минимальный пример, стандарт C++, компилятор и его параметры. Для шаблонов сохраните первую содержательную диагностику и типы аргументов. Удалите закрытые данные. Сначала разберите владение, затем усложняйте пример шаблонами.
Как проверить исправленную функцию name?
Соберите её локально с предупреждениями и вызовите несколько раз: возвращённое значение должно сохраняться независимо от локальных переменных функции. Добавьте проверку равенства строке 'енот'. Санитайзер может обнаружить дефект, но его молчание не является доказательством отсутствия UB.
Можно ли продлить жизнь строки словом static?
Это меняет договор функции: все вызовы начинают использовать общий объект. Такой приём не заменяет решение вопроса владения и может добавить проблемы изменяемого состояния. Возврат значения часто точнее выражает нужное поведение.
Рядом
Соседние страницы каталога
Дальше — весь каталог задач: поиск по названию, темы и фильтры.