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

std::experimental::unique_resource

Материал из cppreference.com
 
 
Технические спецификации
Библиотека файловой системы (ТС файловой системы)
Основы библиотеки (ТС основ библиотеки)
Основы библиотеки 2 (ТС основ библиотеки v2)
Основы библиотеки 3 (ТС основы библиотеки v3)
Расширения для параллелизма (ТС параллелизма)
Расширения для параллелизма 2 (ТС параллелизма v2)
Расширения для конкуренции 2 (ТС конкуренции v2)
Концепты (ТС концепций)
Диапазоны (ТС диапазонов)
Рефлексия (ТС рефлексии)
Специальные математические функции (ТО специальные функции)
 
 
 
Определено в заголовочном файле <experimental/scope>
template<class R, class D>
class unique_resource;
(ТС основы библиотеки v3)

unique_resource это универсальная оболочка RAII (Получение Ресурса Есть Инициализация) для дескрипторов ресурсов, которая владеет и управляет ресурсом через дескриптор и удаляет этот ресурс при уничтожении unique_resource.

Ресурс удаляется с помощью средства удаления типа D, когда происходит одно из следующих событий:

  • управляющий объект unique_resource уничтожен
  • управляющий объект unique_resource присваивается из другого ресурса через operator= или reset().

Пусть тип RS будет R, если R является типом объекта, или std::reference_wrapper<std::remove_reference_t<R>> иначе:

  • unique_resource эффективно хранит подобъект типа RS, который представляет собой дескриптор ресурса или его обёртку, средство удаления типа D и флаг bool, указывающий владеет ли оболочка ресурсом.
  • В целях пояснения подобъект типа RS называется дескриптором сохранённого ресурса и хранится (если R является типом объекта) или обёртывается (если R ссылочный тип) R и называется дескриптором базового ресурса. Эти два термина не используются LFTS.

Содержание

[править] Параметры шаблона

R тип дескриптора ресурса
D тип удаления
Требования к типам
-
R должен быть типом объекта или ссылкой на левостороннее значение типа объекта. Пусть UnrefR будет std::remove_reference_t<R>, UnrefR должен быть MoveConstructible, и если UnrefR не CopyConstructible, std::is_nothrow_move_constructible_v<UnrefR> должно быть true.
-
D должен быть типом Destructible и MoveConstructible FunctionObject, и если D не CopyConstructible, std::is_nothrow_move_constructible_v<D> должно быть true. Учитывая левостороннее значение d типа D и левостороннее значение r типа UnrefR, выражение d(r) должно быть правильно сформировано.

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

создаёт новый unique_resource
(public функция-элемент) [править]
удаляет управляемый ресурс, если таковой присутствует
(public функция-элемент) [править]
присваивает unique_resource
(public функция-элемент) [править]
Модификаторы
освобождает право собственности
(public функция-элемент) [править]
удаляет или заменяет управляемый ресурс
(public функция-элемент) [править]
Наблюдатели
обращается к базовому дескриптору ресурса
(public функция-элемент) [править]
обращается к функции удаления, используемой для удаления управляемого ресурса
(public функция-элемент) [править]
обращается к указателю, если дескриптор ресурса является указателем
(public функция-элемент) [править]

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

создаёт unique_resource, проверяя недопустимое значение
(шаблон функции) [править]

[править] Принципы вывода

[править] Примечание

Типы дескрипторов ресурсов, соответствующие NullablePointer, также могут управляться с помощью std::unique_ptr. В отличие от unique_ptr, unique_resource не требует NullablePointer.

[править] Пример

[править] Смотрите также

умный указатель с уникальной семантикой владения объектом
(шаблон класса) [править]