std :: list如何分配节点与元素

时间:2014-07-26 19:47:16

标签: c++ allocator stdlist

std::list如何分配保存next / prev指针的节点及其包含的T元素?

我认为标准分配器只能用于为一种类型分配内存(因为std::allocator::allocatesizeof(T)为增量分配内存。因此,似乎不可能在单个分配中分配列表节点和包含的对象,这意味着必须使用实现决定的任何内容分配节点,并且节点存储指向对象而不是对象本身的指针,这意味着两个级别的间接从指向列表节点的指针到它包含的对象,这似乎是低效的。是这种情况吗?

1 个答案:

答案 0 :(得分:7)

allocator有一个成员模板类rebind,它负责分配其他类型。 std::allocator here的页面实际上有一个您要问的确切示例。我会在这里引用它:

直到C ++ 11

  

std::list<T, A>使用分配内部类型Node<T>的节点   分配器A::rebind<Node<T>>::other

自C ++ 11

  

std::list<T, A>使用分配内部类型Node<T>的节点   分配器std::allocator_traits<A>::rebind_alloc<Node<T>>,其中   如果A是a,则以A::rebind<Node<T>>::other实现   std::allocator