C++ 命名需求: Erasable (自 C++11 起)
来自 cppreference.com
指定类型对象可以由给定的 Allocator 销毁。
[编辑] 需求
类型 T
是来自 Container X
的 Erasable,其 value_type
与 T
相同,如果在给定
一个
|
分配器类型 |
m
|
A 类型的左值 |
p
|
T* 类型的指针,由容器准备 |
其中 X::allocator_type
与 std::allocator_traits<A>::rebind_alloc<T> 相同,
以下表达式是良构的
std::allocator_traits<A>::destroy(m, p);
如果 X
不是分配器感知的,或者是一个 std::basic_string 特化,则该术语的定义与 A
为 std::allocator<T> 相同,除了不需要创建任何分配器对象,并且不会实例化 std::allocator 的用户定义特化。
[编辑] 注释
所有 标准库容器 都要求它们的元素类型满足 Erasable。
对于默认分配器,此需求等效于 p->~T() 的有效性,它接受具有可访问析构函数的类类型和所有标量类型,但拒绝数组类型、函数类型、引用类型和 void。 |
(直到 C++20) |
对于默认分配器,此需求等效于 std::destroy_at(p) 的有效性,它接受具有可访问析构函数的类类型和所有标量类型,以及它们的数组。 |
(自 C++20 起) |
虽然在 C++23 之前,当销毁 std::basic_string 的元素时,需要使用自定义的 destroy
,但所有实现都只使用了默认机制。该需求由 P1072R10 修正以匹配现有实践。
[编辑] 另请参阅
CopyInsertable | |
MoveInsertable | |
EmplaceConstructible | |
Destructible |