std::experimental::make_unique_resource_checked
来自 cppreference.com
< cpp | experimental | unique resource
定义在头文件 <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>> |
(库基础 TS v3) | |
创建一个 unique_resource
,初始化其存储的资源句柄,用 std::forward<R>(r) 初始化,并用 std::forward<D>(d) 初始化其删除器。仅当 bool(r == invalid) 为 false 时,创建的 unique_resource
拥有该资源。
如果表达式 r == invalid 不能 隐式转换为 bool,则程序格式错误;如果转换导致未定义的行为或抛出异常,则行为未定义。
内容 |
[编辑] 参数
r | - | 资源句柄 |
d | - | 用于释放资源的删除器 |
invalid | - | 指示资源句柄无效的值 |
[编辑] 返回值
如上所述的 unique_resource
。
[编辑] 异常
在存储的资源句柄和删除器的初始化过程中抛出的任何异常。
noexcept 规范:
noexcept(
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() { // avoid calling fclose when fopen fails 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.