Вступить в клуб →
сложнаявопросЯзык C/C++ и работа с памятью

Два shared_ptr, созданные из одного сырого указателя

В модуле работы с устройством встретился такой код:

Device *raw = new Device();

std::shared_ptr<Device> a(raw);
std::shared_ptr<Device> b(raw);

// оба указателя живут до конца области видимости

Что произойдёт при выходе из области видимости?

  • Счётчик ссылок станет равен двум, объект будет удалён ровно один раз — код корректен, хотя и написан неаккуратно
  • Второй конструктор бросит std::bad_weak_ptr, потому что объект уже находится под управлением другого shared_ptr
  • Получится утечка: сырой указатель уже передан во владение, и второй shared_ptr откажется удалять этот объект
  • Каждый shared_ptr завёл собственный блок управления со счётчиком 1, поэтому объект будет удалён дважды

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела