C++ 具名要求:可擦除 (Erasable)
来自cppreference.com
指定该类型的对象能以给定的分配器 (Allocator) 销毁。
要求
以下情况下,类型 T
从容器 (Container) X
(其 value_type
等同于 T
)可擦除 (Erasable) :给定
A
|
分配器类型 |
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) |