0xb*_*00d 3 c++ containers stl allocator
首先,我认为不是.但是,我在调试模式下观察到了MSVC 10.0的这种行为.我正在使用一个自定义allocator类,它依赖于用户只传递在同一个实例上分配的指针deallocate.但是,在发布模式下,我的代码正在运行.
这是一个错误还是我弄错了?
该标准要求任何分配器都能够释放由同一类型的任何其他分配器产生的内存,即使它是完全不同的实例.这是list::splice正常工作所必需的.它在很大程度上被认为是C++规范中的一个设计缺陷,而在C++ 0x中,它们会向分配器引入一组修正来记住它.与此同时,您在STL容器中使用的任何分配器都不能具有自己的本地状态.
编辑:对于那些想要原始语言的人,这里是C++ ISO规范的§20.1.5/ 4:
允许本国际标准中描述的容器实现假设其分配器模板参数满足表32中的以下两个附加要求.
- 给定分配器类型的所有实例都必须是可互换的,并且始终相互比较.
在C++ 0x标准的最新ISO草案中,此要求不再存在.默认情况下std::allocator仍会根据需要保持此不变量,但看起来您将来不得不以这种方式限制自己.