C++ named requirements: Erasable (since C++11)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
指定该类型的对象可以通过给定的 Allocator 进行销毁。
目录 |
要求
给定以下类型、值和表达式:
| 类型 | 定义 |
T
|
对象类型 |
A
|
分配器类型 |
X
|
满足以下所有条件的容器类型:
|
| 值 | 定义 |
| m |
类型为
A
的左值
|
| p |
类型为
T*
的指针
|
如果表达式
std::
allocator_traits
<
A
>
::
destroy
(
m, p
)
格式正确,则
T
可从
X
中
擦除
。
注释
所有 标准库容器 都要求其值类型满足 Erasable 要求。
|
使用默认分配器时,该要求等价于 p - > ~T ( ) 的有效性,该表达式接受具有可访问析构函数的类类型和所有标量类型,但拒绝数组类型、函数类型、引用类型以及 void 。 |
(C++20 前) |
|
使用默认分配器时,该要求等价于 std:: destroy_at ( p ) 的有效性,该表达式接受具有可访问析构函数的类类型、所有标量类型及其数组类型。 |
(C++20 起) |
尽管在 C++23 之前要求销毁
std::basic_string
元素时必须使用自定义的
destroy
操作,但所有实现都仅使用了默认机制。该要求已通过
P1072R10
修正以符合现有实践。
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| DR | 适用范围 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| N3346 | C++11 | 未要求说明其对象可通过分配器销毁的类型 | 增加了该要求 |
参见
| 可复制插入 | |
| 可移动插入 | |
| 可原位构造 | |
| 可析构 |