命名空间
变体
操作

C++ 命名要求: 可擦除 (自 C++11 起)

来自 cppreference.cn
 
 
C++ 命名要求
基本
类型属性
全库范围




Container(容器)
容器元素
Erasable(可擦除)
(C++11)
迭代器 (Iterator)
流 I/O
格式化器
随机数
并发
(C++11)
范围
多维视图
其他

 

指定一个给定 分配器 可以销毁此类型的对象。

目录

[编辑] 要求

给定以下类型、值和表达式

类型 定义
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(可析构)