std::experimental:: unique_resource
|
定义于头文件
<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)
|
具有唯一对象所有权语义的智能指针
(类模板) |