编译器支持STL容器中的有状态分配器

lib*_*ako 11 c++ containers stl allocator c++11

新的C++ 11标准要求STL实现支持容器中的有状态分配器.主STL实现(Visual Studio 2008,2010,libstdc ++)现在是否符合此要求?我在MSDN或libstdc ++文档中没有发现任何相关信息.

lib*_*ako 15

看起来STL容器中的有状态分配器的功能已经得到广泛支持.在大多数情况下,分配器的完整性不会造成麻烦.尚未得到广泛支持的是新标准处理有问题情况的方式(交换容器(是否交换分配器),列表拼接).

这个帖子说:

在大多数当前标准库(包括MS使用的Dinkumware)的代码中,支持有状态分配器

这个步骤(libstdc ++,2004)说(如果我理解正确的话):

我们已经支持分配器了l1.get_allocator() != l2.get_allocator().我们不就是做任何特殊规定,以检测这些分配器splice()swap().

这篇博客文章(libstdc ++,2009)说:

现在,C++ 0x模式下的现有容器与有状态分配器一起使用效率更高(即,在元素构建时不会动态创建分配器).

本文档介绍了新的libc ++库:

所有容器都满足所有最新的分配器要求,这些要求完全支持有状态分配器. - 无状态分配器的空间被优化掉了.

EASTL支持有状态分配器.

该主题包含有关此功能的可移植性的有趣争议.

所以大部分STL实现支持全状态的分配器,这意味着它们不会产生发动机罩下的分配器类型的其他实例,但存储客户端提供的分配器实例和所有分配/释放操作是通过该完成的.但是它们处理swapping 的方式list::splice是无法记录的,不可移植的.

更新:VS2008的STL要求分配器具有模板化的复制构造函数,IMO最不可能使用自定义分配器:简单的隔离存储.

对于对STL中有状态分配器的当前状态不满意的人,我建议考虑Boost.IntrusiveBoost.Container.