forward_list,set,list等如何调用std :: allocator?

时间:2014-01-06 01:39:17

标签: c++ stl allocator

我注意到allocator只能分配T类型的对象并保留大小为n * sizeof(T)的内存块。但是,std::list<T>类型内的链接列表节点不一定是T类型的对象,也不一定与T对象的大小相同。在这种情况下,std::list如何使用std::allocator来分配内存?

1 个答案:

答案 0 :(得分: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