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

std::shared_ptr

Материал из cppreference.com
< cpp‎ | memory
 
 
 
Динамическое управление памятью
Низкоуровневое управление памятью
Аллокаторы
allocator
allocator_traits(C++11)
allocator_arg_t(C++11)
allocator_arg(C++11)
uses_allocator(C++11)
scoped_allocator_adaptor(C++11)
Неинициализированные хранилища
uninitialized_copy
uninitialized_copy_n(C++11)
uninitialized_fill
uninitialized_fill_n
raw_storage_iterator
get_temporary_buffer
return_temporary_buffer
Умные указатели
unique_ptr(C++11)
shared_ptr(C++11)
weak_ptr(C++11)
auto_ptr(устарело)
owner_less(C++11)
enable_shared_from_this(C++11)
bad_weak_ptr(C++11)
default_delete(C++11)
Поддержка сборки мусора
declare_reachable(C++11)
undeclare_reachable(C++11)
declare_no_pointers(C++11)
undeclare_no_pointers(C++11)
pointer_safety(C++11)
get_pointer_safety(C++11)
Разное
pointer_traits(C++11)
addressof(C++11)
align(C++11)
Библиотека C
 
 
Определено в заголовочном файле <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 функция-член) [edit]
разрушает объект, которым владеет, если больше нет shared_ptrs ссылающихся на него
(public функция-член) [edit]
задает значение shared_ptr
(public функция-член) [edit]
Модификаторы
заменяет объект, которым владеет
(public функция-член) [edit]
обмен содержимым
(public функция-член) [edit]
Наблюдатели
возвращает указатель на управляемый объект
Оригинал:
returns a pointer to the managed object
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

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

(public функция-член) [edit]
возвращает количество объектов shared_ptr, которые ссылаются на тот же управляемый объект
(public функция-член) [edit]
проверяет, является ли управляемый объект удалось только в текущем экземпляре shared_ptr
Оригинал:
checks whether the managed object is managed only by the current shared_ptr instance
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(public функция-член) [edit]
проверяет, не связан управляемого объекта
Оригинал:
checks if there is associated managed object
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(public функция-член) [edit]
предоставляет владельцу на основе упорядочения общих указателей
Оригинал:
provides owner-based ordering of shared pointers
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(public функция-член) [edit]

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

создает общий указатель, который управляет новый объект
Оригинал:
creates a shared pointer that manages a new object
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(шаблон функции) [edit]
создает общий указатель, который управляет новый объект выделяется использованием распределителя
Оригинал:
creates a shared pointer that manages a new object allocated using an allocator
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

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

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

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

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

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

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

(шаблон функции) [edit]

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

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

(специализация шаблона класса) [edit]

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

В типичной реализации, 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 также не достигнет нуля.