为什么std :: list有一个类型为T的分配器?

时间:2016-05-17 18:59:43

标签: c++ templates linked-list allocator

我正在尝试实现我自己的标准兼容链表,我似乎无法弄清楚为什么你想要一个T分配器。在我的实现中,节点类保存T本身,而不是指向存储在内存中其他地方的T的指针,因此T永远不会被显式分配,而是仅作为节点的一部分创建。我会理解为什么你可能想要一个节点分配器,但为什么要一个T?

此节点的简化版本。

class Node {
    Node* next, prev;
    T data; // Not T*
}

1 个答案:

答案 0 :(得分:4)

欢迎来到分配器的精彩世界!你的观察结果非常正确,这就是为什么每个分配器都必须有一个rebind类型的成员。

此类型允许allocator将使用(T)实例化的类型转换为分配的实际类型的分配器 - 这对于列表或其他一些容器(例如,映射)是特殊的。 / p>

我个人认为更好的解决方案是制作分配器模板模板参数,并允许容器获得具体类型 - 但在STL设计时模板模板参数仍未得到广泛支持。