如果指定一个值类型不同的分配器,会发生什么情况
What happens if you specify an allocator where the value_types are different?
假设我声明std::vector<std::string, std::allocator<char>>
。会发生什么更糟糕的事情?我运行了它,似乎没有遇到任何内存错误。
它会导致未定义的行为。对于像vector
这样的分配器感知容器,标准在表99:中指定
需要:
allocator_type::value_type
与X::value_type
相同。
(请注意,同一行还指定allocator_type
必须是容器专用化的模板参数的typedef)
根据[res.on.functions]/2:
特别是,在以下情况下,效果是未定义的:
[…]
--用于在实例化模板时用作模板参数的类型组件,如果对该类型的操作没有实现适用要求子条款(17.6.3.5、23.2、,24.2,26.2)。
我猜编译器隐式优化了它,但最坏的情况是未定义的行为
相关文章:
- 将指针分配给另一个指针时会发生什么情况?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 在什么情况下,我想在 C/C++ 代码中使用内联汇编代码
- 发生注入类名时会发生什么情况?(C++)
- 在什么情况下,需要共享智能指针而无法使用唯一指针?
- 重新分配向量时,向量中的内存会发生什么情况
- 如果结构中的字符串比使用的 p/调用签名长或短,会发生什么情况?
- 为什么或在什么情况下,你会将参数作为C++中的引用(或指针)传递给函数?
- 如果我向一个12字节的缓冲区写入的字节数少于12,会发生什么情况
- 删除对象(具有不同类型)的引用时会发生什么情况?
- 如果我在 c++ 中以 new 的放置形式使用没有足够的内存,会发生什么情况?
- 使用 Google 基准测试时返回值会发生什么情况?
- 正在连接的等待条件变量的线程会发生什么情况?
- 如果未定义的C++行为符合 C 定义的行为,会发生什么情况?
- 在什么情况下,使用'const T*'输入参数比'const T&'更可取?
- 如果字符串在 C/C++ 中没有 NUL 字符(以防编译器允许它通过)会发生什么情况?
- 将虚拟方法定义为私有方法时会发生什么情况?
- 如果我将"reference to vector"分配给"vector"会发生什么情况
- 初始化原子指针是原子的吗?如果初始化或内存分配引发,会发生什么情况?
- 如果指定一个值类型不同的分配器,会发生什么情况