命名空间
变体
操作

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

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




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

 

指定给定 分配器 (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)