Несколько объектов std::shared_ptr
могут ссылаться на один и тот же указатель благодаря наличию блока управления (control block).
Блок управления, связанный с управляемым объектом, содержит:
shared_ptr
для того же объекта. Уменьшается при уничтожении shared_ptr
. Когда становится равным нулю, связанный объект (указатель) удаляется.std::weak_ptr
. Увеличивается при создании weak_ptr
из shared_ptr
. Уменьшается при уничтожении weak_ptr
. Когда оба счетчика становятся равными нулю, блок управления удаляется.Когда вы создаете shared_ptr
из существующего shared_ptr
(копирование, присваивание-копирование), они начинают использовать один и тот же блок управления, и счетчик сильных ссылок в этом блоке увеличивается.
Пример:
cpp
Несколько объектов std::shared_ptr
могут ссылаться на один и тот же указатель благодаря наличию блока управления (control block).
Блок управления, связанный с управляемым объектом, содержит:
shared_ptr
для того же объекта. Уменьшается при уничтожении shared_ptr
. Когда становится равным нулю, связанный объект (указатель) удаляется.std::weak_ptr
. Увеличивается при создании weak_ptr
из shared_ptr
. Уменьшается при уничтожении weak_ptr
. Когда оба счетчика становятся равными нулю, блок управления удаляется.Когда вы создаете shared_ptr
из существующего shared_ptr
(копирование, присваивание-копирование), они начинают использовать один и тот же блок управления, и счетчик сильных ссылок в этом блоке увеличивается.
Пример:
cpp
Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.