stl allocator,其他类型的复制构造函数,重新绑定

时间:2010-10-31 09:13:22

标签: c++

STL分配器需要这个构造函数表单(20.1.5):X a(b);,要求Y(a) == b;

在标准实现中,这意味着,并实现为:

  template<class U> allocator( const allocator<U> & o ) throw()

我无法理解为什么存在此要求。我知道分配器应该是静态的(没有任何状态),但为什么你能够像这样转换它们呢?

1 个答案:

答案 0 :(得分:6)

允许来自其他分配器的构造,因为容器需要使用与您指定的不同的分配器类型。例如,列表和映射分配其内部节点类型,而不是它们公开的value_type。

代码类似于:

template<class T, class Alloc=std::allocator<T> >
struct Container {
  typedef T value_type;
  typedef Alloc allocator_type;

private:
  struct Node {/*...*/};
  typedef typename Alloc::template rebind<Node>::other RealAllocatorType;
  RealAllocatorType allocator;
};