std::list 用它的分配器参数做什么?

rie*_*eux 5 c++ stl

std::list由分配器类型参数化,它可能会重新绑定该类型以分配列表节点而不是Ts。那么它对传递给构造函数的分配器类型的对象做了什么?

template <class T, class Alloc = std::allocator<T>>
class list
{
    class node { ... T element; ... };

    using real_alloc =
        typename std::allocator_traits<Alloc>::template rebind_alloc<node>;
    real_alloc m_allocator;

public:
    list(const Alloc&);
};
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我们需要初始化m_allocator一个节点分配器,但是构造函数被赋予了一个T分配器。我们是直接将T分配器扔在地板上,还是以某种方式使用它?

Die*_*ühl 2

分配器T仍然用于分配construct()内部节点的部分destroy()T使用这些操作可能需要在构造期间添加自定义参数,例如,可选地将合适的分配器参数转发到构造的对象。