shared_ptr Class
Создание ссылок подсчитанное интеллектуального указателя на динамически выделенного объекта.
template<class Ty>
class shared_ptr {
public:
typedef Ty element_type;
shared_ptr();
shared_ptr(nullptr_t);
shared_ptr(const shared_ptr& sp);
shared_ptr(shared_ptr&& sp);
template<class Other>
explicit shared_ptr(Other * ptr);
template<class Other, class D>
shared_ptr(Other * ptr, D dtor);
template<class D>
shared_ptr(nullptr_t, D dtor);
template<class Other, class D, class A>
shared_ptr(Other *ptr, D dtor, A alloc);
template<class D, class A>
shared_ptr(nullptr_t, D dtor, A alloc);
template<class Other>
shared_ptr(const shared_ptr<Other>& sp);
template<class Other>
shared_ptr(const shared_ptr<Other>&& sp);
template<class Other>
explicit shared_ptr(const weak_ptr<Other>& wp);
template<class Other>
shared_ptr(auto_ptr<Other>& ap);
template<class Other, class D>
shared_ptr(unique_ptr<Other, D>&& up);
template<class Other>
shared_ptr(const shared_ptr<Other>& sp, Ty *ptr);
~shared_ptr();
shared_ptr& operator=(const shared_ptr& sp);
template<class Other>
shared_ptr& operator=(const shared_ptr<Other>& sp);
shared_ptr& operator=(shared_ptr&& sp);
template<class Other>
shared_ptr& operator=(shared_ptr<Other>&& sp);
template<class Other>
shared_ptr& operator=(auto_ptr< Other >&& ap);
template <class Other, class D>
shared_ptr& operator=(const unique_ptr< Other, D>& up) = delete;
template <class Other, class D>
shared_ptr& operator=(unique_ptr<Other, D>&& up);
void swap(shared_ptr& sp);
void reset();
template<class Other>
void reset(Other *ptr);
template<class Other, class D>
void reset(Other *ptr, D dtor);
template<class Other, class D, class A>
void reset(Other *ptr, D dtor, A alloc);
Ty *get() const;
Ty& operator*() const;
Ty *operator->() const;
long use_count() const;
bool unique() const;
operator bool() const;
template<class Other>
bool owner_before(shared_ptr<Other> const& ptr) const;
template<class Other>
bool owner_before(weak_ptr<Other> const& ptr) const;
template<class D, class Ty>
D* get_deleter(shared_ptr<Ty> const& ptr);
};
Параметры
Ty
Тип управляемого создания общего указателя.Other
Тип управляемого указателем аргумента.ptr
Указатель, который необходимо скопировать.D
Тип deleter.A
Тип распределителя.dtor
Deleter.alloc
Распределитель.sp
Интеллектуального указателя, чтобы скопировать или переместить.wp
Предоставляет указатель, который необходимо скопировать или переместить.ap
Auto указатель, который необходимо скопировать или переместить.up
Уникальный указатель, который нужно переместить.
Заметки
Класс шаблона описание объекта, использующего ссылку со счетчиком управлять ресурсами.Объект shared_ptr представляет навести указатель на ресурс, он имеет или содержит указатель.Ресурс может иметься более чем одним объектом shared_ptr; когда последний объект shared_ptr, имеющий указанный ресурс разрушается, ресурс удаленного.
shared_ptr. останавливает иметь ресурс при переподчинен или возврата.
Аргумент Ty может быть шаблона функции-членами неполного типа, если не указано иное для некоторых.
Когда объект shared_ptr<Ty> формируется из указателя ресурса из типа G* или shared_ptr<G>, тип указателя G* должен быть преобразуемым к Ty*.Если это не так, то код не будет компилироваться.Например:
class F {};
class G : public F {};
shared_ptr<G> sp0(new G); // okay, template parameter G and argument G*
shared_ptr<G> sp1(sp0); // okay, template parameter G and argument shared_ptr<G>
shared_ptr<F> sp2(new G); // okay, G* convertible to F*
shared_ptr<F> sp3(sp0); // okay, template parameter F and argument shared_ptr<G>
shared_ptr<F> sp4(sp2); // okay, template parameter F and argument shared_ptr<F>
shared_ptr<int> sp4(new G); // error, G* not convertible to int*
shared_ptr<int> sp5(sp2); // error, template parameter int and argument shared_ptr<F>
Объект shared_ptr имеет ресурса:
если было создано с указателем на этот ресурс,
если было создано из объекта shared_ptr, который имеет ресурс,
если было создано из объекта weak_ptr Class, на который указывает на этот ресурс или
если владелец этого ресурса, присвоенное в него или с помощью shared_ptr::operator= или путем вызова функции-члена shared_ptr::reset.
Объекты shared_ptr, иметь общую папку ресурса блок элемента управления.Блок элемента управления содержит:
количество объектов shared_ptr, которые имеют ресурс,
количество объектов weak_ptr, указывающих на ресурс,
deleter для ресурсов, если он есть,
пользовательский распределитель блока для элемента управления, если он есть.
Объект shared_ptr, который инициализируется с помощью пустых указателей имеет блок элемента управления и не является пустым.После выпусков объекта shared_ptr ресурс, он больше не имеет этот ресурс.После выпусков объекта weak_ptr ресурс, он больше не указывает к этому ресурсу.
Если количество объектов shared_ptr, ресурс будет иметь ноль, ресурс освобождается или, удалите его или путем передачи его адрес в deleter, зависит от способа создания исходного владение ресурса.Если количество объектов shared_ptr, иметь ресурс ноль и число объектов weak_ptr, указывающих к этому ресурсу ноль, блок элемента управления удаленного, используя пользовательский распределитель блока для элемента управления, если он есть.
Пустой объект shared_ptr не содержит ресурсы и не имеет блок элемента управления.
Deleter объект функции, который содержит функцию-член operator().Его тип должен быть копией constructible и его конструктор копий и деструктор не должны вызывать исключения.Он принимает один параметр, объект для удаления.
Некоторые функции принимают список аргументов, определяющий свойства результирующего объекта shared_ptr<Ty> или объекта weak_ptr<Ty>.Можно определить такой список аргументов несколькими способами:
нет аргументов -- получившийся объект пустой объект shared_ptr или пустой объект weak_ptr.
ptr -- указатель типа Other* к ресурсу, который требуется управление.Ty должно быть переполнен типом.Если функция завершается с ошибкой, то (поскольку блок элемента управления нельзя выбрать) он вычисляет выражение delete ptr.
ptr, dtor -- указатель типа Other* к ресурсу, который требуется управление и deleter для этого ресурса.Если функция завершается с ошибкой (поскольку блок элемента управления нельзя выбрать), он вызывает метод dtor(ptr), который должен определить хорошо.
ptr, dtor, alloc -- указатель типа Other* к ресурсу, который требуется управление, deleter для этого ресурса и распределитель для управления любое хранилище, которое необходимо для выделения и освобождения.Если функция завершается с ошибкой, то (поскольку блок элемента управления нельзя выбрать) вызывается dtor(ptr), который должен определить хорошо.
sp -- объект shared_ptr<Other>, содержащий ресурс, который нужно управлять.
wp -- объект weak_ptr<Other>, указывающий на ресурс, который нужно управлять.
ap -- объект auto_ptr<Other>, который содержит указатель на ресурс, который нужно управлять.Если функция завершается успешно, то она вызывает функцию ap.release(); в противном случае она оставляет неизменной ap.
Во всех случаях тип указателя Other* должен быть преобразуемым к Ty*.
Потокобезопасность
Несколько потоков могут читать и записывать различные объекты shared_ptr одновременно, даже если объекты копии, совместно использующих владельца.
Члены
Конструкторы
Конструирует shared_ptr. |
|
Удаляет shared_ptr. |
Методы
Тип элемента. |
|
Получает адрес другому ресурса. |
|
Возвращает значение true, если данный объект shared_ptr приказано перед (или меньше), предоставляемым указателем. |
|
Ресурс Replace имеемый. |
|
Обмен 2 объекта shared_ptr. |
|
Если тесты имеемый ресурс уникальны. |
|
Подсчитывает количество владельцев ресурса. |
Операторы
Если тесты имеемый ресурса существует. |
|
Получает значение параметра. |
|
Заменяет имеемый ресурс. |
|
Получает указатель указанному значению. |
Требования
Заголовок: <memory>
Пространство имен: std
См. также
Ссылки
Потокобезопасность в стандартной библиотеке C++