Как `make_shared` избегает двойного выделения и позволяет`release` продлевать время жизни управляемого объекта сверх срока службы shared_pointer?
std::shared_ptr
может быть реализован с двумя членами, указателем на управляемый ресурс и указателем на блок управления.
std::shared_ptr
может быть построен с std::make_shared
который может объединить два выделения для управляемого объекта и shared_ptr
Блок управления в один.
Как release
тогда работаешь? Это позволяет управляемому объекту пережить общий указатель, но блок управления должен быть удален в деструкторе общего указателя. Как происходит уничтожение и освобождение?
2 ответа
Ты не можешь release
из shared_ptr
, Не работает Там нет такого члена.
Когда вызывается деструктор shared_ptr, общий refCount уменьшается. Когда общий refCount достигает 0, объект уничтожается. В случае объекта, созданного с помощью make_shared, пространство для объекта остается неиспользованным в блоке управления. Когда слабый refCount достигает 0, пространство освобождается обратно в кучу.