类模板
<memory>

std::allocator

template <class T> class allocator;
默认分配器
分配器是定义内存模型以供标准库某些部分(尤其是 STL 容器)使用的类。

本节介绍“默认分配器模板”allocator(小写)。这是所有标准容器将在未指定最后一个(可选的)模板参数时使用的分配器,也是标准库中唯一预定义的分配器。

也可以定义其他分配器。任何具有与此“默认分配器”相同的成员并遵循其最低要求的类都可以用作标准容器的分配器。
也可以定义其他分配器。任何类Alloc对于allocator_traits<Alloc>产生有效的实例化,并定义了适当的成员,都可以用作标准容器的分配器(Alloc可能通过成员函数实现也可能不实现该功能)。

除了其析构函数外,标准默认分配器的任何成员allocator类模板均不得引入数据竞争。分配或取消分配存储的成员函数的调用应发生在单个总顺序中,并且每次此类取消分配应发生在下一个(如果有)分配之前。

严格来说,分配器描述的内存模型可以针对每种要分配的对象类型进行专门化,甚至可以为它们工作的每个容器存储局部数据。尽管默认的allocator.

模板参数

T
对象分配的元素的类型(别名为成员类型 value_type)。

成员类型

成员allocator 中定义代表
value_typeT元素类型
指针T*指向元素的指针
引用T&指向元素的引用
const_pointerconst T*指向常量元素的指针
const_referenceconst T&指向常量元素的引用
size_typesize_t元素数量
difference_typeptrdiff_t两个指针之间的差
rebind<Type>成员类其成员类型 other 是等效的分配器类型,用于分配类型为 Type 的元素
成员allocator 中定义代表
value_typeT元素类型
指针T*指向元素的指针
引用T&指向元素的引用
const_pointerconst T*指向常量元素的指针
const_referenceconst T&指向常量元素的引用
size_typesize_t元素数量
difference_typeptrdiff_t两个指针之间的差
rebind<Type>成员类其成员类型 other 是等效的分配器类型,用于分配类型为 Type 的元素
propagate_on_container_move_assignmenttrue_type指示当容器被移动赋值时,allocator 应进行传播

成员函数


模板特化

头文件 <memory>void 类型提供了 allocator 的特化,定义为
1
2
3
4
5
6
7
template <> class allocator<void> {
public:
  typedef void* pointer;
  typedef const void* const_pointer;
  typedef void value_type;
  template <class U> struct rebind { typedef allocator<U> other; };
};