Namespaces
Variants

std::experimental:: unique_resource

From cppreference.net
定义于头文件 <experimental/scope>
template < class R, class D >
class unique_resource ;
(库基础 TS v3)

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

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

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

令类型 RS 为:当 R 是对象类型时为 R ,否则为 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 应满足 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
(公开成员函数)
若存在被管理资源则将其释放
(公开成员函数)
赋值 unique_resource
(公开成员函数)
修改器
释放所有权
(公开成员函数)
释放或替换被管理资源
(公开成员函数)
观察器
访问底层资源句柄
(公开成员函数)
访问用于释放被管理资源的删除器
(公开成员函数)
若资源句柄为指针则访问其所指对象
(公开成员函数)

非成员函数

创建 unique_resource ,检查无效值
(函数模板)

推导指南

注释

满足 NullablePointer 要求的资源句柄类型也可由 std::unique_ptr 管理。与 unique_ptr 不同, unique_resource 不要求实现 NullablePointer

示例

参见

(C++11)
具有唯一对象所有权语义的智能指针
(类模板)