std::experimental:: make_unique_resource_checked
|
Défini dans l'en-tête
<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) | |
Crée une
unique_resource
, initialise son gestionnaire de ressource stocké avec
std::
forward
<
R
>
(
r
)
et son suppresseur avec
std::
forward
<
D
>
(
d
)
. La
unique_resource
créée possède la ressource si et seulement si
bool
(
r
==
invalid
)
est
false
.
Le programme est mal formé si l'expression r == invalid ne peut pas être contextuellement convertie en bool , et le comportement est indéfini si la conversion résulte en un comportement indéfini ou lève une exception.
Table des matières |
Paramètres
| r | - | un gestionnaire de ressource |
| d | - | un suppresseur à utiliser pour libérer la ressource |
| invalid | - | une valeur indiquant que le gestionnaire de ressource est invalide |
Valeur de retour
Un
unique_resource
décrit ci-dessus.
Exceptions
Toute exception levée lors de l'initialisation du gestionnaire de ressource stocké et du suppresseur.
std::
is_nothrow_constructible_v
<
std::
decay_t
<
R
>
, R
>
&&
std::
is_nothrow_constructible_v
<
std::
decay_t
<
D
>
, D
>
Notes
make_unique_resource_checked
existe pour éviter d'appeler une fonction de suppression avec un argument invalide.
Le gestionnaire de ressource
r
est soit copié soit déplacé dans la valeur de retour, et le
unique_resource
créé contient toujours un gestionnaire de ressource sous-jacent avec un type d'objet.
Exemple
#include <cstdio> #include <experimental/scope> int main() { // éviter d'appeler fclose quand fopen échoue 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."); }
Sortie possible :
The file does not exist.