当构造函数抛出vector.emplace或vector.emplace_back时会发生什么?

时间:2013-09-20 01:35:47

标签: c++ oop c++11 stl

我有一个可能在构造时抛出异常的类。 我需要这个类的很多对象,我在带有emplace_back的向量中构造它们。如果构造函数抛出会发生什么?

1 个答案:

答案 0 :(得分:2)

看起来它取决于被调用的构造函数。

根据标准中的第23.3.7.5节,如果自定义构造函数抛出,则对emplace_back的调用应该无效:

template <class... Args> void emplace_back(Args&&... args);
     

[...]

     

如果除了复制构造函数之外还抛出异常,请移动   T或的构造函数,赋值运算符或移动赋值运算符   任何InputIterator操作都没有效果。