Mediumsmart-pointers
Что такое std::weak_ptr и зачем он нужен?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
weak_ptr — не владеющая ссылка на объект, управляемый shared_ptr. Не увеличивает счётчик сильных ссылок, поэтому объект может быть уничтожен, пока weak жив. Для доступа нужно вызвать lock().
auto sp = std::make_shared<int>(42);
std::weak_ptr<int> wp = sp;
sp.reset(); // объект уничтожен
if (auto locked = wp.lock()) {
std::cout << *locked; // не выполнится
} else {
std::cout << "объект уже мёртв";
}Главные применения:
- Разрыв циклических ссылок shared_ptr (иначе два объекта не удалятся);
- Кэши — хранить weak на ресурс, пересоздавать при необходимости;
- Наблюдатели.
expired()проверяет жив ли объект,use_count()— число strong refs.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.