Как `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, пространство освобождается обратно в кучу.

Другие вопросы по тегам