shared_ptr
: Указатель, которому могут принадлежать несколько объектов shared_ptr
. Объект, на который он указывает, будет уничтожен, когда связанный с ним shared_ptr
перестанет существовать (например, выйдет из области видимости) и ни один другой shared_ptr
больше не будет на него указывать. Использует счетчик ссылок.
weak_ptr
: Указатель, который ссылается на объект, которым владеет shared_ptr
, но не увеличивает счетчик ссылок. Он не управляет временем жизни объекта. Используется для предотвращения циклических ссылок между shared_ptr
. Для доступа к объекту необходимо сначала преобразовать weak_ptr
в shared_ptr
с помощью метода lock()
.
intrusive_ptr
(не входит в стандартную библиотеку, но распространен): Указатель, который предполагает, что сам объект, на который он указывает, содержит счетчик ссылок. Управление временем жизни осуществляется за счет инкрементации и декрементации этого встроенного счетчика. Требует от пользователя реализации методов инкрементации и декрементации счетчика ссылок в самом классе объекта.
Пример использования shared_ptr
и weak_ptr
:
cpp
shared_ptr
: Указатель, которому могут принадлежать несколько объектов shared_ptr
. Объект, на который он указывает, будет уничтожен, когда связанный с ним shared_ptr
перестанет существовать (например, выйдет из области видимости) и ни один другой shared_ptr
больше не будет на него указывать. Использует счетчик ссылок.
weak_ptr
: Указатель, который ссылается на объект, которым владеет shared_ptr
, но не увеличивает счетчик ссылок. Он не управляет временем жизни объекта. Используется для предотвращения циклических ссылок между shared_ptr
. Для доступа к объекту необходимо сначала преобразовать weak_ptr
в shared_ptr
с помощью метода lock()
.
intrusive_ptr
(не входит в стандартную библиотеку, но распространен): Указатель, который предполагает, что сам объект, на который он указывает, содержит счетчик ссылок. Управление временем жизни осуществляется за счет инкрементации и декрементации этого встроенного счетчика. Требует от пользователя реализации методов инкрементации и декрементации счетчика ссылок в самом классе объекта.
Пример использования shared_ptr
и weak_ptr
:
cpp
Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.