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

asd*_*sdf 8 c++ stdlist allocator

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

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

Ben*_*ley 7

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

直到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::rebind<Node<T>>::otherA是否实现的 std::allocator