Kel*_*tek 3 c++ templates linked-list allocator
我正在尝试实现我自己的符合标准的链表,但我似乎无法弄清楚为什么你会想要一个 T 分配器。在我的实现中,节点类保存 T 本身,而不是指向存储在内存中其他位置的 T 的指针,因此 T 永远不会被显式分配,而是只作为节点的一部分创建。我会理解为什么你可能想要一个节点分配器,但为什么是 T?
我的节点的简化版本在这里。
class Node {
Node* next, prev;
T data; // Not T*
}
Run Code Online (Sandbox Code Playgroud)
欢迎来到美妙的分配器世界!你的观察非常正确,这就是为什么每个分配器都必须有一个rebind类型成员。
这种类型允许分配器将它用 ( T)实例化的类型转换为分配的实际类型的分配器 - 列表或其他一些容器(例如映射)的特殊内容。
我个人认为更好的解决方案是使分配器模板参数,并允许容器获得具体类型 - 但在 STL 设计模板模板参数时仍然没有得到广泛支持。