6
我注意到分配器只能分配T
類型的對象,並保留大小爲n * sizeof(T)
的內存塊。但是,std::list<T>
類型中的鏈接列表節點不一定是T
類型的對象,也不一定與T
對象的大小相同。在這種情況下,std::list
如何使用std::allocator
分配內存?forward_list,set,list等如何調用std :: allocator?
我注意到分配器只能分配T
類型的對象,並保留大小爲n * sizeof(T)
的內存塊。但是,std::list<T>
類型中的鏈接列表節點不一定是T
類型的對象,也不一定與T
對象的大小相同。在這種情況下,std::list
如何使用std::allocator
分配內存?forward_list,set,list等如何調用std :: allocator?
這就是爲什麼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。
通過使用'std :: allocator :: rebind'並將'n'設置爲1.:D –
yzt