C++ 命名要求: 可擦除 (自 C++11)
来自 cppreference.cn
指定给定 分配器 (Allocator) 可以销毁此类型的对象。
目录 |
[编辑] 要求
给定以下类型、值和表达式
类型 | 定义 |
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 起) |
尽管直到 C++23,在销毁 std::basic_string 的元素时,需要使用自定义的 destroy
,但所有实现都只使用了默认机制。 P1072R10 修正了此要求以符合现有实践。
[编辑] 缺陷报告
以下行为变更的缺陷报告被追溯应用于之前发布的 C++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
N3346 | C++11 | 没有要求指定一种类型 其对象可以使用分配器销毁 |
添加了要求 |
[编辑] 参见
可复制插入 (CopyInsertable) | |
可移动插入 (MoveInsertable) | |
可emplace构造 (EmplaceConstructible) | |
可析构 (Destructible) |