std::experimental::unique_resource
Материал из cppreference.com
< cpp | experimental
Определено в заголовочном файле <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.
[править] Пример
Этот раздел не завершён Причина: нет примера |
[править] Смотрите также
(C++11) |
умный указатель с уникальной семантикой владения объектом (шаблон класса) |