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() { // 避免在 fclose 失败时调用 fclose 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("文件存在。"); else std::puts("文件不存在。"); }
可能的输出:
文件不存在。