std::experimental:: make_unique_resource_checked
|
Definido en el encabezado
<experimental/scope>
|
||
|
template
<
class
R,
class
D,
class
S
=
std::
decay_t
<
R
>
>
std
::
experimental
::
unique_resource
<
std::
decay_t
<
R
>
,
std::
decay_t
<
D
>>
|
(library fundamentals TS v3) | |
Crea un
unique_resource
, inicializa su manejador de recurso almacenado con
std::
forward
<
R
>
(
r
)
y su eliminador con
std::
forward
<
D
>
(
d
)
. El
unique_resource
creado posee el recurso si y solo si
bool
(
r
==
invalid
)
es
false
.
El programa está mal formado si la expresión r == invalid no puede ser convertida contextualmente a bool , y el comportamiento es indefinido si la conversión resulta en comportamiento indefinido o lanza una excepción.
Contenidos |
Parámetros
| r | - | un manejador de recursos |
| d | - | un eliminador para disponer del recurso |
| invalid | - | un valor que indica que el manejador de recursos no es válido |
Valor de retorno
Un
unique_resource
descrito anteriormente.
Excepciones
Cualquier excepción lanzada durante la inicialización del manejador de recursos almacenado y el eliminador.
std::
is_nothrow_constructible_v
<
std::
decay_t
<
R
>
, R
>
&&
std::
is_nothrow_constructible_v
<
std::
decay_t
<
D
>
, D
>
Notas
make_unique_resource_checked
existe para evitar llamar a una función de eliminación con un argumento inválido.
Manejador de recurso
r
es copiado o movido al valor de retorno, y el
unique_resource
creado siempre mantiene un manejador de recurso subyacente con tipo de objeto.
Ejemplo
#include <cstdio> #include <experimental/scope> int main() { // evitar llamar a fclose cuando fopen falla auto file = std::experimental::make_unique_resource_checked( std::fopen("potentially_nonexistent_file.txt", "r"), nullptr, [](std::FILE *fptr) { std::fclose(fptr); } ); if (file.get()) std::puts("The file exists."); else std::puts("The file does not exist."); }
Salida posible:
The file does not exist.