Mediumссылкиlifetime
Что такое dangling reference/pointer и как его избежать?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Dangling — ссылка/указатель на объект, время жизни которого закончилось. Разыменование dangling — UB, часто «работает в debug, падает в release».
// ПЛОХО: возврат ссылки на локальную переменную
int& bad() {
int local = 42;
return local; // dangling после выхода
}
// ПЛОХО: указатель инвалидируется после reallocation
std::vector<int> v = {1};
int* p = &v[0];
v.push_back(2); // p может стать dangling- Избегают: возврат по значению (RVO/move), умные указатели,
reserve()для vector, осторожность соstring_view; - Санитайзеры (
-fsanitize=address) ловят многие случаи.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.