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