std::experimental::unique_resource
来自 cppreference.com
< cpp | experimental
定义在头文件中 <experimental/scope> |
||
template< class R, class D > class unique_resource; |
(库基础 TS v3) | |
unique_resource
是一个通用的 RAII 包装器,用于资源句柄,它通过句柄拥有和管理资源,并在 unique_resource
被销毁时处置该资源。
当以下任一事件发生时,资源将使用类型为 D
的删除器进行处置
- 管理
unique_resource
对象被销毁, - 管理
unique_resource
对象从另一个资源通过 operator= 或 reset() 赋值。
如果 R
是一个对象类型,则令类型 RS
为 R
,否则令类型 RS
为 std::reference_wrapper<std::remove_reference_t<R>>
-
unique_resource
实际上包含一个类型为RS
的子对象,它包含或包装资源句柄,一个类型为D
的删除器和一个 bool 标志,指示包装器是否拥有资源。 - 为了解释说明,类型为
RS
的子对象称为 *存储的资源句柄*,而存储的(如果R
是一个对象类型)或包装的(如果R
是一个引用类型)R
称为 *底层资源句柄*。这两个术语没有被 LFTS 使用。
内容 |
[编辑] 模板参数
R | - | 资源句柄类型 |
D | - | 删除器类型 |
类型要求 | ||
-R 应为一个对象类型或对一个对象类型的左值引用。令 UnrefR 为 std::remove_reference_t<R>,UnrefR 应为 可移动构造,并且如果 UnrefR 不是 可复制构造,则 std::is_nothrow_move_constructible_v<UnrefR> 应为 true. | ||
-D 应为一个 可销毁 和 可移动构造 函数对象 类型,并且如果 D 不是 可复制构造,则 std::is_nothrow_move_constructible_v<D> 应为 true。给定类型为 D 的左值 d 和类型为 UnrefR 的左值 r ,表达式 d(r) 应为良构的。 |
[编辑] 成员函数
构造一个新的 unique_resource (公有成员函数) | |
如果存在,则处置管理的资源 (公有成员函数) | |
赋值 unique_resource (公有成员函数) | |
修饰符 | |
释放所有权 (公有成员函数) | |
处置或替换管理的资源 (公有成员函数) | |
观察者 | |
访问底层资源句柄 (公有成员函数) | |
访问用于处置管理资源的删除器 (公有成员函数) | |
如果资源句柄是指针,则访问指向的对象 (公有成员函数) |
[编辑] 非成员函数
创建一个 unique_resource ,检查无效值(函数模板) |
[编辑] 推断指南
[编辑] 注意
满足 NullablePointer 的资源句柄类型也可以由 std::unique_ptr 管理。与 unique_ptr
不同,unique_resource
不需要 NullablePointer。
[edit] 示例
本节内容尚未完善 原因:没有示例 |
[edit] 另请参阅
(C++11) |
具有唯一对象所有权语义的智能指针 (类模板) |