std::allocator_traits
定义于 | 内存 |
自 C++11 起
template< class Alloc >
struct allocator_traits;
allocator_traits 类模板提供了访问分配器(Allocator)各种属性的标准化方法。标准容器和其他标准库组件通过此模板访问分配器,这使得任何类类型都可以用作分配器,只要用户提供的 std::allocator_traits 特化实现了所有所需功能。
声明 std::allocator_traits 的显式或部分特化的程序是病态的,不需要诊断。 (自 C++23 起)默认的、非特化的 std::allocator_traits 包含以下成员:
成员类型
pub | 类型 | 定义 |
pub | allocator_type | Alloc |
pub | value_type | Alloc::value_type |
pub | pointer | 如果存在 Alloc::pointer,否则为 value_type* |
pub | const_pointer | 如果存在 Alloc::const_pointer,否则为 std::pointer_traits <pointer>::rebind<const value_type> |
pub | void_pointer | 如果存在 Alloc::void_pointer,否则为 std::pointer_traits <pointer>::rebind<void> |
pub | const_void_pointer | 如果存在 Alloc::const_void_pointer,否则为 std::pointer_traits <pointer>::rebind<const_void> |
pub | difference_type | 如果存在 Alloc::difference_type,否则为 std::pointer_traits <pointer>::difference_type |
pub | size_type | 如果存在 Alloc::size_type,否则为 std::make_unsigned <difference_type>::type |
pub | propagate_on_container_copy_assignment | 如果存在 Alloc::propagate_on_container_copy_assignment,否则为 std::false_type |
pub | propagate_on_container_move_assignment | 如果存在 Alloc::propagate_on_container_move_assignment,否则为 std::false_type |
pub | propagate_on_container_swap | 如果存在 Alloc::propagate_on_container_swap,否则为 std::false_type |
pub | is_always_equal | 如果存在 Alloc::is_always_equal,否则为 std::is_empty <Alloc>::type |
成员别名模板
pub | 类型 | 定义 |
pub | rebind_alloc<T> | 如果存在 Alloc::rebind<T>::other,否则如果此 Alloc 是 Alloc<U, Args>,则为 Alloc<T, Args> |
pub | rebind_traits<T> | std::allocator_traits<rebind_alloc<T>> |
成员函数
pub | allocatestatic | 使用分配器分配未初始化的存储 |
pub | allocate_at_least(C++23)static | 使用分配器分配未初始化的存储 |
pub | deallocatestatic | 使用分配器解除分配存储 |
pub | constructstatic | 在已分配的存储中构造对象 |
pub | destroystatic | 销毁存储在已分配存储中的对象 |
pub | max_sizestatic | 返回分配器支持的最大对象大小 |
pub | select_on_container_copy_constructionstatic | 获取复制标准容器后要使用的分配器 |
缺陷报告
以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 发布时的行为 | 正确行为 |
---|---|---|---|
LWG 2108 | C++11 | 没有办法表明分配器是无状态的 | 提供了 is_always_equal |