C++ 命名要求: 可擦除 (自 C++11 起)
来自 cppreference.cn
指定一个给定 分配器 可以销毁此类型的对象。
目录 |
[编辑] 要求
给定以下类型、值和表达式
类型 | 定义 |
T
|
一个对象类型 |
A
|
一个分配器类型 |
X
|
一个满足以下所有条件的容器类型
|
值 | 定义 |
m | 一个类型为 A 的左值 |
p | 一个类型为 T* 的指针 |
如果表达式 std::allocator_traits<A>::destroy(m, p) 形式良好,则 T
可以从 X
中 擦除。
[编辑] 注意
所有 标准库容器 都要求它们的值类型满足 可擦除。
对于默认分配器,此要求等同于 p->~T() 的有效性,它接受具有可访问析构函数的类类型和所有标量类型,但拒绝数组类型、函数类型、引用类型和 void。 |
(C++20 前) |
对于默认分配器,此要求等同于 std::destroy_at(p) 的有效性,它接受具有可访问析构函数的类类型和所有标量类型,以及它们的数组。 |
(C++20 起) |
尽管要求在使用自定义 destroy
销毁 std::basic_string 的元素时使用自定义 destroy
,直到 C++23,所有实现都只使用默认机制。该要求通过 P1072R10 进行了更正,以匹配现有实践。
[编辑] 缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 发布时的行为 | 正确的行为 |
---|---|---|---|
N3346 | C++11 | 没有要求指定类型是否 其对象可以使用分配器销毁 |
添加了要求 |
[编辑] 另请参阅
CopyInsertable(可复制插入) | |
MoveInsertable(可移动插入) | |
EmplaceConstructible(可就地构造) | |
Destructible(可析构) |