我正在尝试实现我自己的标准兼容链表,我似乎无法弄清楚为什么你想要一个T分配器。在我的实现中,节点类保存T本身,而不是指向存储在内存中其他地方的T的指针,因此T永远不会被显式分配,而是仅作为节点的一部分创建。我会理解为什么你可能想要一个节点分配器,但为什么要一个T?
此节点的简化版本。
class Node {
Node* next, prev;
T data; // Not T*
}
答案 0 :(得分:4)
欢迎来到分配器的精彩世界!你的观察结果非常正确,这就是为什么每个分配器都必须有一个rebind
类型的成员。
此类型允许allocator将使用(T
)实例化的类型转换为分配的实际类型的分配器 - 这对于列表或其他一些容器(例如,映射)是特殊的。 / p>
我个人认为更好的解决方案是制作分配器模板模板参数,并允许容器获得具体类型 - 但在STL设计时模板模板参数仍未得到广泛支持。