【发布时间】:2012-01-17 18:34:50
【问题描述】:
我正在尝试查找在线参考以查看几个 std 容器的异常安全性。
在std::vector 的情况下,它是否保持push_back 调用之前的状态?我假设向量的所有对象仍然有效(没有调用析构函数)。在 push_back 引发 std::bad_alloc 异常之后,什么保证提供 std::vector?
【问题讨论】:
标签: c++ vector std exception-safety
我正在尝试查找在线参考以查看几个 std 容器的异常安全性。
在std::vector 的情况下,它是否保持push_back 调用之前的状态?我假设向量的所有对象仍然有效(没有调用析构函数)。在 push_back 引发 std::bad_alloc 异常之后,什么保证提供 std::vector?
【问题讨论】:
标签: c++ vector std exception-safety
如果它抛出,向量不会改变。甚至不是capacity()。
根据[container.requirements.general]:
除非另有说明(参见 23.2.4.1、23.2.5.1、23.3.3.4 和 23.3.6.5),本节中定义的所有容器类型 条款满足以下附加要求:
[...]
——如果 push_back() 或 push_front() 函数抛出异常,则该函数无效。
【讨论】: