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 подскажет развёрнутый ответ в реальном времени.