Hardумные указатели

Что такое control block в shared_ptr и когда он создаётся?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Control block — структура, общая для всех shared_ptr/weak_ptr на один объект: atomic-счётчик сильных ссылок, счётчик слабых, deleter, allocator.

// 1) make_shared: одна аллокация (control block + объект) — эффективно
auto a = std::make_shared<Widget>();

// 2) shared_ptr(new T): две аллокации
std::shared_ptr<Widget> b(new Widget());

// ОПАСНО: два независимых shared_ptr из одного raw → double delete
Widget* raw = new Widget;
std::shared_ptr<Widget> c1(raw);
// std::shared_ptr<Widget> c2(raw);  // создаст ВТОРОЙ control block!

Поэтому никогда не передавайте один raw pointer в несколько shared_ptr.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.