4

我正在尝试查找在线参考,以查看几个 std 容器的异常安全性。

在 的情况下 std::vector,它是否保持 push_back 调用之前的状态?我假设向量的所有对象仍然有效(没有调用析构函数)。std::vectorpush_back 抛出异常后提供什么保证std::bad_alloc

4

1 回答 1

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() 函数抛出异常,则该函数无效。

于 2012-01-17T18:43:23.487 回答