Namespaces
Variants

std::experimental::unique_resource<R, D>:: unique_resource

From cppreference.net
unique_resource ( ) ;
(1) (библиотека fundamentals TS v3)
template < class RR, class DD >
unique_resource ( RR && r, DD && d ) noexcept ( /*см. ниже*/ )
(2) (библиотека fundamentals TS v3)
unique_resource ( unique_resource && other ) ;
(3) (библиотека fundamentals TS v3)

Следующие элементы используются в пояснительных целях:

  • RS — это тип хранимого дескриптора ресурса.
  • Выражение res_ ссылается на базовый дескриптор ресурса.
  • del_ ссылается на объект-деструктор.
1) Конструктор по умолчанию. Выполняет инициализацию значением сохранённого дескриптора ресурса и удалителя. Сконструированный unique_resource не владеет ресурсом.
Эта перегрузка участвует в разрешении перегрузки только если оба std:: is_default_constructible_v < R > и std:: is_default_constructible_v < D > являются true .
2) Сохранённый дескриптор ресурса инициализируется с помощью std:: forward < RR > ( r ) если std:: is_nothrow_constructible_v < RS, RR > равно true , иначе с помощью r . Если инициализация сохранённого дескриптора ресурса вызывает исключение, вызывается d ( r ) .
Затем удалитель инициализируется с помощью std:: forward < DD > ( d ) если std:: is_nothrow_constructible_v < D, DD > равно true , иначе с помощью d . Если инициализация удалителя вызывает исключение, вызывается d ( res_ ) .
Сконструированный unique_resource владеет ресурсом.
Эта перегрузка участвует в разрешении перегрузки только если все из std:: is_constructible_v < RS, RR > , std:: is_constructible_v < D, DD > , std:: is_nothrow_constructible_v < RS, RR > || std:: is_constructible_v < RS, RR & > и std:: is_nothrow_constructible_v < D, DD > || std:: is_constructible_v < D, DD & > являются true .
Программа является некорректной, если любое из выражений d ( r ) , d ( res_ ) и del_ ( res_ ) является некорректным.
Поведение не определено, если любое из выражений d ( r ) , d ( res_ ) или del_ ( res_ ) приводит к неопределенному поведению или выбрасывает исключение.
3) Конструктор перемещения. Сохранённый дескриптор ресурса инициализируется из дескриптора other с использованием std::move если std:: is_nothrow_move_constructible_v < RS > равно true . Если инициализация сохранённого дескриптора ресурса вызывает исключение, other не изменяется.
Затем удаляющий объект инициализируется из объекта other с использованием std::move если std:: is_nothrow_move_constructible_v < D > равно true . Если инициализация удаляющего объекта вызывает исключение и std:: is_nothrow_move_constructible_v < RS > равно true и other владеет ресурсом, вызывается удаляющий объект other с res_ для освобождения ресурса, затем вызывается other. release ( ) .
После конструирования, созданный unique_resource владеет ресурсом тогда и только тогда, когда other владел ресурсом до конструирования, а other устанавливается в состояние отсутствия владения ресурсом.

Содержание

Параметры

r - дескриптор ресурса
d - функция удаления для освобождения ресурса
other - другой unique_resource для получения владения

Исключения

Любое исключение, выброшенное во время инициализации сохранённого handle ресурса или deleter.

2)
noexcept спецификация:

Примечания

Механизм этих конструкторов гарантирует отсутствие утечки ресурсов.

Пример

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

создаёт новый unique_ptr
(публичная функция-член std::unique_ptr<T,Deleter> )