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

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 и MoveConstructibleFunctionObject, и если 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.

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

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

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