Namespaces
Variants

std::experimental:: unique_resource

From cppreference.net
Определено в заголовочном файле <experimental/scope>
template < class R, class D >
class unique_resource ;
(техническая спецификация библиотеки fundamentals 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 должен быть типом объекта или lvalue-ссылкой на тип объекта. Пусть 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 . При заданной lvalue d типа D и lvalue r типа UnrefR , выражение d ( r ) должно быть корректным.

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

создает новый unique_resource
(public member function)
освобождает управляемый ресурс, если он присутствует
(public member function)
присваивает unique_resource
(public member function)
Модификаторы
освобождает владение
(public member function)
освобождает или заменяет управляемый ресурс
(public member function)
Наблюдатели
получает доступ к базовому дескриптору ресурса
(public member function)
получает доступ к удалителю, используемому для освобождения управляемого ресурса
(public member function)
получает доступ к объекту, если дескриптор ресурса является указателем
(public member function)

Функции, не являющиеся членами класса

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

Руководства по выводу

Примечания

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

Пример

Смотрите также

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