std::experimental::unique_resource
Материал из cppreference.com
< cpp | experimental
<tbody>
</tbody>
| Определено в заголовочном файле <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) |
умный указатель с уникальной семантикой владения объектом (шаблон класса) |