std::list
如何分配保存next
/ prev
指针的节点及其包含的T
元素?
我认为标准分配器只能用于为一种类型分配内存(因为std::allocator::allocate
以sizeof(T)
为增量分配内存。因此,似乎不可能在单个分配中分配列表节点和包含的对象,这意味着必须使用实现决定的任何内容分配节点,并且节点存储指向对象而不是对象本身的指针,这意味着两个级别的间接从指向列表节点的指针到它包含的对象,这似乎是低效的。是这种情况吗?
答案 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