Пространства имён
Варианты
Действия

std::shared_ptr

Материал из cppreference.com
< cpp‎ | memory
 
 
 
 
 
Defined in header <memory>
template< class T > class shared_ptr;
(начиная с C++11)

std::shared_ptr – умный указатель, с разделяемым владением объектом через его указатель. Несколько указателей shared_ptr могут владеть одним и тем же объектом; объект будет уничтожен, когда последний shared_ptr, указывающий на него, будет уничтожен или сброшен. Объект уничтожается с использованием delete-expression или с использованием пользовательской функции удаления объекта, переданной в конструктор shared_ptr.

shared_ptr может не владеть ни одним объектом, в этом случае он называется пустым.

shared_ptr отвечает требованиям CopyConstructible и CopyAssignable.

Содержание

[править] Типы-члены

Тип члена Definition
element_type T

[править] Функции-члены

создает новый shared_ptr
(public функция-член) [править]
разрушает объект, которым владеет, если больше нет shared_ptrs ссылающихся на него
(public функция-член) [править]
задает значение shared_ptr
(public функция-член) [править]
Модификаторы
заменяет объект, которым владеет
(public функция-член) [править]
обмен содержимым
(public функция-член) [править]
Наблюдатели
возвращает указатель на управляемый объект
Оригинал:
returns a pointer to the managed object
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(public функция-член) [править]
разыменовывает указатель на управляемый объект
Оригинал:
dereferences pointer to the managed object
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(public функция-член) [править]
возвращает количество объектов shared_ptr, которые ссылаются на тот же управляемый объект
(public функция-член) [править]
проверяет, контролируется ли управляемый объект единственно текущим объектом shared_ptr
(public функция-член) [править]
проверяет, указывает ли указатель на объект
(public функция-член) [править]
сравнивает два указателя по полю «управляемый объект»
(public функция-член) [править]

[править] Функции, не являющиеся членами

создает общий указатель, который управляет новым объектом
(шаблон функции) [править]
создает общий указатель, который управляет новым объектом, выделенным с помощью распределителя
(шаблон функции) [править]
применяется static_cast, dynamic_cast или const_cast к типу управляемого объекта
Оригинал:
applies static_cast, dynamic_cast or const_cast to the type of the managed object
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции) [править]
возвращает Deleter указанного типа, если они принадлежат
Оригинал:
returns the deleter of specified type, if owned
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции) [править]
сравнивается с другим shared_ptr или с nullptr
Оригинал:
compares with another shared_ptr or with nullptr
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции) [править]
выводит значение управляемый указатель на поток вывода
Оригинал:
outputs the value of the managed pointer to an output stream
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции) [править]
Специализируется std::swap алгоритм
Оригинал:
specializes the std::swap algorithm
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции) [править]
Специализируется атомарных операций
Оригинал:
specializes atomic operations
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции) [править]

[править] Вспомогательные классы

хэш поддержку std::shared_ptr
Оригинал:
hash support for std::shared_ptr
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(специализация шаблона класса) [править]

[править] Заметки о реализации

В типичной реализации, std::shared_ptr содержит только два указателя:

  • указатель на объект владения
  • указатель на блок управления

, где блок управления является динамически-созданным объект, который содержит:

  • указатель на управляемый объект или сам управляемый объект
  • функцию удаления объекта
  • аллокатор
  • счетчик указателей shared_ptr, владеющих управляемым объектом
  • счетчик указателей weak_ptr, которые ссылаются на управляемый объект

Когда указатель shared_ptr создан вызовом std::make_shared или std::allocate_shared, блок управления содержит сам управляемый объект, в качестве члена структуры данных. Когда указатель shared_ptr создан вызовом его конструктора, блок управления содержит указатель на управляемый объект.

Указатель, содержащийся в shared_ptr идентичен тому, который вернет функция-член get(), в то время как указатель/объект, который хранится в блоке управления, будет удален, когда количество владеющих объектом указателей достигнет нуля: данные указатели не обязательно равны друг другу.

Деструктор shared_ptr уменьшает счетчик общих владельцев в контрольном блоке, и если этот счетчик достиг нуля, блок управления вызывает деструктор управляемого объекта, однако блок управления не освобождает себя до тех пор, пока счетчик std::weak_ptr также не достигнет нуля.