Namespaces
Variants

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

From cppreference.net
unique_resource ( ) ;
(1) (biblioteca fundamentals TS v3)
template < class RR, class DD >
unique_resource ( RR && r, DD && d ) noexcept ( /*ver más abajo*/ )
(2) (biblioteca fundamentals TS v3)
unique_resource ( unique_resource && other ) ;
(3) (biblioteca fundamentals TS v3)

Los siguientes elementos se utilizan con fines explicativos:

  • RS es el tipo del identificador de recurso almacenado.
  • La expresión res_ se refiere al identificador de recurso subyacente.
  • del_ se refiere al objeto eliminador.
1) Constructor por defecto. Inicializa por valor el manejador del recurso almacenado y el eliminador. El unique_resource construido no posee el recurso.
Esta sobrecarga participa en la resolución de sobrecarga solo si tanto std:: is_default_constructible_v < R > como std:: is_default_constructible_v < D > son true .
2) El manejador de recursos almacenado se inicializa con std:: forward < RR > ( r ) si std:: is_nothrow_constructible_v < RS, RR > es true , de lo contrario con r . Si la inicialización del manejador de recursos almacenado lanza una excepción, llama a d ( r ) .
Luego, el eliminador se inicializa con std:: forward < DD > ( d ) si std:: is_nothrow_constructible_v < D, DD > es true , de lo contrario con d . Si la inicialización del eliminador lanza una excepción, llama a d ( res_ ) .
El unique_resource construido posee el recurso.
Esta sobrecarga participa en la resolución de sobrecarga solo si todos 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 & > y std:: is_nothrow_constructible_v < D, DD > || std:: is_constructible_v < D, DD & > son true .
El programa está mal formado si alguna de las expresiones d ( r ) , d ( res_ ) y del_ ( res_ ) está mal formada.
El comportamiento es indefinido si alguna de las expresiones d ( r ) , d ( res_ ) y del_ ( res_ ) resulta en comportamiento indefinido o lanza una excepción.
3) Constructor de movimiento. El manejador del recurso almacenado se inicializa a partir del de other , usando std::move si std:: is_nothrow_move_constructible_v < RS > es true . Si la inicialización del manejador del recurso almacenado lanza una excepción, other no se modifica.
Luego, el deleter se inicializa con el de other , usando std::move si std:: is_nothrow_move_constructible_v < D > es true . Si la inicialización del deleter lanza una excepción y std:: is_nothrow_move_constructible_v < RS > es true y other posee el recurso, llama al deleter de other con res_ para disponer del recurso, luego llama a other. release ( ) .
Después de la construcción, el unique_resource construido posee su recurso si y solo si other poseía el recurso antes de la construcción, y other se establece para no poseer el recurso.

Contenidos

Parámetros

r - un manejador de recurso
d - un eliminador para utilizar para disponer del recurso
other - otro unique_resource del cual adquirir la propiedad

Excepciones

Cualquier excepción lanzada durante la inicialización del manejador de recursos almacenado o el eliminador.

Notas

El mecanismo de estos constructores garantiza que no haya fugas de recursos.

Ejemplo

Véase también

construye un nuevo unique_ptr
(función miembro pública de std::unique_ptr<T,Deleter> )