std::experimental:: make_unique_resource_checked
|
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
>>
|
(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.
std::
is_nothrow_constructible_v
<
std::
decay_t
<
R
>
, R
>
&&
std::
is_nothrow_constructible_v
<
std::
decay_t
<
D
>
, D
>
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.