2016-05-17 64 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

相關問題