Как удаляется контрольный блок у std::shared_ptr()?

Есть момент который я не очень понимаю.

Если я не ошибаюсь то, при работе с std::weak_ptr() имеет значение, как мы создали std::shared_ptr().

   auto sp1 = std::shared_ptr<int>(new int(10));   // 1
   auto sp2 = std::make_shared<int>(10);           // 2

Разница между 1 и 2 в выделение памяти для объекта и контрольного блока(раздельно или вместе). Когда мы работаем с std::weak_ptr() мы можем проверить его на "просроченность" и даже если счетчик сильных ссылок = 0, то пока есть сам std::weak_ptr() будет существовать контрольный блок и вот я наконец подошел к вопросу!

Когда мы выделили память через std::make_shared<>(), затем у нас остался только сам weak_ptr получается у нас есть контрольный блок, но т.к. мы выделили память вместе то и объект вроде как бы есть, так что творится с этим объектом или выделенной памятью?


Ответы (0 шт):