std::shared_ptr
| 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 к типу управляемого объекта Оригинал: Текст был переведён автоматически используя Переводчик 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. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (шаблон функции) | |
| (C++11) |
Специализируется std::swap алгоритм Оригинал: specializes the std::swap algorithm Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (шаблон функции) |
| Специализируется атомарных операций Оригинал: specializes atomic operations Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (шаблон функции) | |
[править] Вспомогательные классы
| (C++11) |
хэш поддержку 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 также не достигнет нуля.

