如果指定一个值类型不同的分配器,会发生什么情况

What happens if you specify an allocator where the value_types are different?

本文关键字:分配器 什么情况 类型 一个 如果      更新时间:2023-10-16

假设我声明std::vector<std::string, std::allocator<char>>。会发生什么更糟糕的事情?我运行了它,似乎没有遇到任何内存错误。

它会导致未定义的行为。对于像vector这样的分配器感知容器,标准在表99:中指定

需要:allocator_type::value_typeX::value_type相同。

(请注意,同一行还指定allocator_type必须是容器专用化的模板参数的typedef)

根据[res.on.functions]/2:

特别是,在以下情况下,效果是未定义的:
[…]
--用于在实例化模板时用作模板参数的类型组件,如果对该类型的操作没有实现适用要求子条款(17.6.3.5、23.2、,24.2,26.2)。

我猜编译器隐式优化了它,但最坏的情况是未定义的行为

相关文章: