2014-01-06 72 views
6

我注意到分配器只能分配T類型的對象,並保留大小爲n * sizeof(T)的內存塊。但是,std::list<T>類型中的鏈接列表節點不一定是T類型的對象,也不一定與T對象的大小相同。在這種情況下,std::list如何使用std::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

相關問題