2016-05-17 70 views
1

我想实现我自己的标准兼容链表,我似乎无法弄清楚为什么你会想要一个T分配器。在我的实现中,节点类拥有T本身,而不是指向存储在其他地方的T的指针,所以T永远不会被明确分配,而只会被创建为节点的一部分。我会明白为什么你可能想要一个节点分配器,但为什么一个T?为什么std :: list有一个T类型的分配器?

这里是我的节点的简化版本。

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

它在我知道的所有实现中内部立即反弹。您不能确切地要求用户为您的内部节点类型提供分配器。 –

回答

4

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

这种类型允许分配器将它实例化的类型(T)转换为分配器,以便分配给实际类型 - 对于列表或其他容器(例如映射)来说是特殊的。

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

+0

所以基本上我只需要用我的分配器的rebind来分配我的节点,而不用担心它最初是如何表示Ts的? – Keltek

+0

@Keltek,就是这样。 – SergeyA

相关问题