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模式下的现有容器与有状态分配器一起使用效率更高(即,在元素构建时不会动态创建分配器).
所有容器都满足所有最新的分配器要求,这些要求完全支持有状态分配器. - 无状态分配器的空间被优化掉了.
EASTL支持有状态分配器.
该主题包含有关此功能的可移植性的有趣争议.
所以大部分STL实现支持全状态的分配器,这意味着它们不会产生发动机罩下的分配器类型的其他实例,但存储客户端提供的分配器实例和所有分配/释放操作是通过该完成的.但是它们处理swapping 的方式list::splice是无法记录的,不可移植的.
更新:VS2008的STL要求分配器具有模板化的复制构造函数,IMO最不可能使用自定义分配器:简单的隔离存储.
对于对STL中有状态分配器的当前状态不满意的人,我建议考虑Boost.Intrusive和Boost.Container.