命名空间
变体
操作

std::allocator_traits

来自 cppreference.com
< cpp‎ | memory
 
 
动态内存管理
未初始化内存算法
受约束的未初始化内存算法
分配器
allocator_traits
(C++11)
垃圾收集支持
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)



 
 
定义在头文件 <memory>
template< class Alloc >
struct allocator_traits;
(自 C++11 起)

allocator_traits 类模板提供了访问各种属性的标准化方法 分配器s。标准容器和其他标准库组件通过此模板访问分配器,这使得可以将任何类类型用作分配器,只要用户提供的 std::allocator_traits 特化实现了所有必需的功能。

声明 std::allocator_traits 的显式或部分特化的程序是非法的,无需诊断。

(自 C++23 起)

默认的,非特化的 std::allocator_traits 包含以下成员

内容

[编辑] 成员类型

类型 定义
allocator_type Alloc
value_type Alloc::value_type
pointer 如果存在则为 Alloc::pointer,否则为 value_type*
const_pointer 如果存在则为 Alloc::const_pointer,否则为 std::pointer_traits<pointer>::rebind<const value_type>
void_pointer 如果存在则为 Alloc::void_pointer,否则为 std::pointer_traits<pointer>::rebind<void>
const_void_pointer 如果存在则为 Alloc::const_void_pointer,否则为 std::pointer_traits<pointer>::rebind<const void>
difference_type 如果存在则为 Alloc::difference_type,否则为 std::pointer_traits<pointer>::difference_type
size_type 如果存在则为 Alloc::size_type,否则为 std::make_unsigned<difference_type>::type
propagate_on_container_copy_assignment 如果存在则为 Alloc::propagate_on_container_copy_assignment,否则为 std::false_type
propagate_on_container_move_assignment 如果存在则为 Alloc::propagate_on_container_move_assignment,否则为 std::false_type
propagate_on_container_swap 如果存在则为 Alloc::propagate_on_container_swap,否则为 std::false_type
is_always_equal 如果存在则为 Alloc::is_always_equal,否则为 std::is_empty<Alloc>::type

[编辑] 成员别名模板

类型 定义
rebind_alloc<T> 如果存在则为 Alloc::rebind<T>::other,否则如果此 Alloc 形式为 SomeAllocator<U, Args>,则为 SomeAllocator<T, Args>,其中 Args 是零个或多个 类型参数
rebind_traits<T> std::allocator_traits<rebind_alloc<T>>

[编辑] 成员函数

[静态]
使用分配器分配未初始化的存储
(公共静态成员函数) [编辑]
[静态] (C++23)
通过分配器分配至少与请求大小一样大的存储
(公共静态成员函数) [编辑]
[静态]
使用分配器释放存储
(公共静态成员函数) [编辑]
[静态]
在分配的存储中构造对象
(函数模板) [编辑]
[静态]
销毁分配的存储中存储的对象
(函数模板) [编辑]
[静态]
返回分配器支持的最大对象大小
(公共静态成员函数) [编辑]
在复制标准容器后获取要使用的分配器
(公共静态成员函数) [编辑]

[编辑] 缺陷报告

以下行为变更的缺陷报告被追溯地应用到以前发布的 C++ 标准。

DR 应用于 已发布的行为 正确行为
LWG 2108 C++11 没有办法证明分配器是无状态的 is_always_equal 提供

[编辑] 参见

使用分配器的容器;关联的特性(例如 propagate_on_container_swap)用法
(命名要求)
默认分配器
(类模板) [编辑]
为多级容器实现多级分配器
(类模板) [编辑]
提供有关指针类型的信息
(类模板) [编辑]