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

だから基本的には私のアロケータでリバインドして自分のノードを割り当て、それがTsのためにどういう意味だったのか心配する必要はありません。 – Keltek

+0

@Keltek、まさにそのようです。 – SergeyA

関連する問題