我正在尝试查找在线参考,以查看几个标准容器的异常安全性。
在std::vector
的情况下,它是否保持push_back呼叫之前的状态?我认为向量的所有对象仍然有效(没有调用析构函数)。 push_back抛出std::vector
异常后提供std::bad_alloc
的保证是什么?
答案 0 :(得分:7)
如果它抛出,矢量就不会改变。即使不是capacity()
。
根据[container.requirements.general]:
除非另有说明(见23.2.4.1,23.2.5.1,23.3.3.4和23.3.6.5),所有在此定义的容器类型 条款符合以下附加要求:
[...]
- 如果push_back()或push_front()函数抛出异常,则该函数无效。