Поделиться через


Класс unique_ptr

Хранит указатель на собственный объект. Данный объект не принадлежит никаким другим unique_ptr. Данный объект удаляется при удалении unique_ptr.

template< class Type, class Del = default_delete<Type> >
    class unique_ptr {
public:
    unique_ptr( );
    unique_ptr( nullptr_t Nptr );
    explicit unique_ptr( pointer Ptr );
    unique_ptr( pointer Ptr,
        typename conditional<is_reference<Del>::value, 
            Del,
            typename add_reference<const Del>::type>::type Deleter);
    unique_ptr (pointer Ptr,
        typename remove_reference<Del>::type&& Deleter);
    unique_ptr (unique_ptr&& Right);
    template<class Type2, Class Del2> unique_ptr( unique_ptr<Type2, Del2>&& Right );
    unique_ptr( const unique_ptr& Right) = delete;
    unique_ptr& operator=(const unique_ptr& Right ) = delete;
};

Параметры

  • Right
    Объект unique_ptr.

  • Nptr
    Интерфейс rvalue типа std::nullptr_t.

  • Ptr
    Объект pointer.

  • Deleter
    Функция deleter, которая привязана к unique_ptr.

Исключения

unique_ptr не генерирует исключения.

Заметки

Класс unique_ptr заменяет значение auto_ptr и может использоваться в качестве элемента контейнеров STL.

Используйте вспомогательную функцию make_unique для создания новых экземпляров unique_ptr.

unique_ptr — единственное средство управления ресурсом. Каждый объект unique_ptr сохраняет указатель на объект, которым обладает, или нулевой указатель. Обладать ресурсом может только один объект unique_ptr; при удалении объекта unique_ptr, обладающего тем или иным ресурсом, данный ресурс освобождается. Объект unique_ptr можно перемещать, но нельзя копировать; дополнительные сведения см. в разделе Декларатор ссылки Rvalue: &&.

Ресурс освобождается путем обращения к хранимому объекту deleter типа Del, которому известны принципы выделения ресурсов для конкретного объекта unique_ptr. Значение по умолчанию deleter default_delete<Type> подразумевает, что ресурс, на который указывает _Ptr, выделяется при помощи new и может освобождаться путем обращения к delete _Ptr. (Частичная специализация **unique_ptr<Type[]>**управляет объектами массива, выделенными при помощи new[], и обладает объектом deleter default_delete<Type[]> по умолчанию для обращения к функции delete[] _Ptr.)

Сохраненный указатель на принадлежащий ресурс, stored_ptr относится к типу pointer. Он имеет значение Del::pointer, если определен, и значение Type * , если не определен. Сохраненный объект deleter stored_deleter не занимает пространство в объекте, если deleter не сохраняет данные о состоянии. Обратите внимание, что Del может быть ссылочным типом.

Члены

Конструкторы

unique_ptr::unique_ptr

Для unique_ptr предусмотрено семь конструкторов.

Определения типов

deleter_type

Синоним параметра шаблона Del.

element_type

Синоним для параметра шаблона Type.

указатель

Синоним для Del::pointer, если определен; в противном случае — значение Type *.

Функции-члены

unique_ptr::get

Возвращает stored_ptr.

unique_ptr::get_deleter

Возвращает ссылку на stored_deleter.

unique_ptr::release

сохраняет pointer() в stored_ptr и возвращает его предыдущее содержимое.

unique_ptr::reset

Высвобождает текущий занятый ресурс и принимает новый ресурс.

unique_ptr::swap

Выполняет обмен ресурса и deleter с указанным значением unique_ptr.

Операторы

operator bool

Оператор возвращает значение типа, которое можно преобразовать в значение bool. Результат преобразования в bool — значение true, если get() != pointer(); в противном случае — значение false.

operator->

Функция-член возвращает значение stored_ptr.

operator*

Функция-член возвращает значение*stored_ptr.

unique_ptr operator=

Присваивает значение unique_ptr (или pointer-type) текущему unique_ptr.

Требования

Заголовок: <memory>

Пространство имен: std

См. также

Ссылки

<memory>

Другие ресурсы

члены unique_ptr