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