Namespaces
Variants

std::experimental:: make_unique_resource_checked

From cppreference.net
Definiert im Header <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 ( /*siehe unten*/ ) ;
(Library Fundamentals TS v3)

Erstellt ein unique_resource , initialisiert seinen gespeicherten Ressourcen-Handle mit std:: forward < R > ( r ) und seinen Deleter mit std:: forward < D > ( d ) . Das erstellte unique_resource besitzt die Ressource genau dann, wenn bool ( r == invalid ) false ist.

Das Programm ist fehlerhaft, wenn der Ausdruck r == invalid nicht kontextuell zu bool konvertiert werden kann , und das Verhalten ist undefiniert, wenn die Konvertierung zu undefiniertem Verhalten führt oder eine Ausnahme auslöst.

Inhaltsverzeichnis

Parameter

r - ein Ressourcen-Handle
d - ein Deleter zur Freigabe der Ressource
invalid - ein Wert, der anzeigt, dass das Ressourcen-Handle ungültig ist

Rückgabewert

Ein unique_resource wie oben beschrieben.

Ausnahmen

Jede Ausnahme, die bei der Initialisierung des gespeicherten Ressourcen-Handles und des Deleter ausgelöst wird.

Hinweise

make_unique_resource_checked existiert, um den Aufruf einer Deleter-Funktion mit einem ungültigen Argument zu vermeiden.

Resource-Handle r wird entweder kopiert oder in den Rückgabewert verschoben, und die erstellte unique_resource hält immer ein zugrundeliegendes Resource-Handle mit Objekttyp.

Beispiel

#include <cstdio>
#include <experimental/scope>
int main()
{
    // fclose-Aufruf vermeiden, wenn fopen fehlschlägt
    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.");
}

Mögliche Ausgabe:

The file does not exist.

Siehe auch