2014-01-06 4 views
6

アロケータは、タイプがTで、サイズがn * sizeof(T)のメモリブロックを予約することしかできません。ただし、std::list<T>タイプ内のリンクリストノードは、必ずしもタイプTのオブジェクトではなく、必ずしもTオブジェクトと同じサイズではありません。その場合、std::liststd::allocatorを使用してどのようにメモリを割り当てることができますか?forward_list、set、listなどはどのようにしてstd :: allocatorを呼び出しますか?

+1

'std :: allocator :: rebind'を使用し、' n'を1に設定することによって:D – yzt

答えて

4

これは、rebind typeが存在する理由です。同じようなアロケータを作成して、代わりに何かを割り当てることができます(例えば、node<T>のように)。

基本的にはこのように:もちろん

std::allocator<int> int_alloc; 
std::allocator<int>::rebind<node<int>> node_alloc; 
//Perhaps more useful: 
decltype(int_alloc)::rebind<node<int>> node_alloc; 

、実際の状況では、これはすべてのテンプレートされますが、うまくいけばこれは考え方を示しています。

詳細については、ノートと例hereを参照してください。

関連する問題