Namespaces
Variants

std::experimental:: make_unique_resource_checked

From cppreference.net
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 >>
make_unique_resource_checked ( R && r, const S & invalid, D && d )

noexcept ( /*voir ci-dessous*/ ) ;
(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.

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.

Voir aussi