std::experimental:: make_unique_resource_checked
|
Определено в заголовочном файле
<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
>>
|
(Technical Specification v3 библиотеки fundamentals) | |
Создает
unique_resource
, инициализируя сохраненный дескриптор ресурса с помощью
std::
forward
<
R
>
(
r
)
и его удалитель с помощью
std::
forward
<
D
>
(
d
)
. Созданный
unique_resource
владеет ресурсом тогда и только тогда, когда
bool
(
r
==
invalid
)
равно
false
.
Программа является некорректной, если выражение r == invalid не может быть контекстно преобразовано в bool , и поведение не определено, если преобразование приводит к неопределенному поведению или выбрасывает исключение.
Содержание |
`, `
`, `
Параметры
| r | - | дескриптор ресурса |
| d | - | удалитель для освобождения ресурса |
| invalid | - | значение, указывающее что дескриптор ресурса недействителен |
Возвращаемое значение
A
unique_resource
описанный выше.
Исключения
Любое исключение, выброшенное при инициализации сохранённого дескриптора ресурса и удалителя.
std::
is_nothrow_constructible_v
<
std::
decay_t
<
R
>
, R
>
&&
std::
is_nothrow_constructible_v
<
std::
decay_t
<
D
>
, D
>
Примечания
make_unique_resource_checked
существует для предотвращения вызова функции-деструктора с недопустимым аргументом.
Дескриптор ресурса
r
либо копируется, либо перемещается в возвращаемое значение, и созданный
unique_resource
всегда содержит базовый дескриптор ресурса с типом объекта.
Пример
#include <cstdio> #include <experimental/scope> int main() { // избежать вызова fclose при неудачном fopen 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."); }
Возможный вывод:
The file does not exist.