Hardумные указатели
Что такое std::weak_ptr и зачем он нужен?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
`weak_ptr<T>` — «слабая» ссылка на объект под shared_ptr, не увеличивает счётчик сильных ссылок. Доступ — через lock(), возвращающий shared_ptr (или пустой, если объект уже удалён).
auto sp = std::make_shared<Widget>();
std::weak_ptr<Widget> wp = sp; // не держит Widget живым
if (auto locked = wp.lock()) { // объект ещё жив?
locked->doWork(); // безопасный доступ
}Главное применение — разрыв циклов: если A держит shared_ptr на B, а B на A — утечка. Один из них должен быть weak_ptr. Также — кэши и observer-паттерны.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.