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

7

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


1
通过使用 std::allocator<T>::rebind 并将 n 设置为 1。 :D - yzt
1个回答

5
这就是为什么存在“重新绑定类型”(rebind type)(http://en.cppreference.com/w/cpp/memory/allocator)。它允许您创建一个类似的分配器,该分配器分配其他内容(例如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;

当然,在实际情况下,这一切都将被模板化,但希望这能展示出主要思路。
欲了解更多信息,请参考此处的注释和例子。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接