命名空间
变体
操作

std::experimental::unique_resource

来自 cppreference.cn
< cpp‎ | 实验性
定义于头文件 <experimental/scope>
template< class R, class D >
class unique_resource;
(库基础 TS v3)

unique_resource 是一个通用的 RAII 包装器,用于资源句柄,它通过句柄拥有并管理资源,并在 unique_resource 被销毁时处置该资源。

当发生以下任一情况时,使用类型为 D 的删除器处置资源:

  • 管理 unique_resource 对象被销毁,
  • 管理 unique_resource 对象通过 operator=reset() 从另一个资源赋值。

设类型 RSR,如果 R 是一个对象类型,否则为 std::reference_wrapper<std::remove_reference_t<R>>

  • unique_resource 有效地持有一个类型为 RS 的子对象(它是或包装了资源句柄)、一个类型为 D 的删除器以及一个指示包装器是否拥有资源的 bool 标志。
  • 为了解释目的,类型为 RS 的子对象被称为*存储的资源句柄*,而存储的(如果 R 是对象类型)或包装的(如果 R 是引用类型)R 被称为*底层资源句柄*。LFTS 不使用这两个术语。

目录

[编辑] 模板参数

R - 资源句柄类型
D - 删除器类型
类型要求
-
R 应该是一个对象类型,或者是对象类型的左值引用。设 UnrefRstd::remove_reference_t<R>UnrefR 应该为 可移动构造的 (MoveConstructible),如果 UnrefR 不是 可复制构造的 (CopyConstructible),则 std::is_nothrow_move_constructible_v<UnrefR> 应为 true
-
D 应该是一个 可析构的 (Destructible)可移动构造的 (MoveConstructible) 函数对象 (FunctionObject) 类型,如果 D 不是 可复制构造的 (CopyConstructible),则 std::is_nothrow_move_constructible_v<D> 应为 true。给定类型为 D 的左值 d 和类型为 UnrefR 的左值 r,表达式 d(r) 应该格式良好。

[编辑] 成员函数

构造一个新的 unique_resource
(public 成员函数) [编辑]
如果存在,处置所管理的资源
(public 成员函数) [编辑]
赋值一个 unique_resource
(public 成员函数) [编辑]
修改器
释放所有权
(public 成员函数) [编辑]
处置或替换所管理的资源
(public 成员函数) [编辑]
观察器
访问底层资源句柄
(public 成员函数) [编辑]
访问用于处置所管理资源的删除器
(public 成员函数) [编辑]
如果资源句柄是指针,访问所指向的对象
(public 成员函数) [编辑]

[编辑] 非成员函数

创建一个 unique_resource,检查无效值
(函数模板) [编辑]

[编辑] 推导指南

[编辑] 注释

满足 可空指针 (NullablePointer) 的资源句柄类型也可以由 std::unique_ptr 管理。与 unique_ptr 不同,unique_resource 不要求 可空指针 (NullablePointer)

[编辑] 示例

[编辑] 参阅

具有唯一对象所有权语义的智能指针
(类模板) [编辑]