C++ 当构造函数抛出vector.emplace或vector.emplace\u时会发生什么?
我有一个类,它在构造时可能引发异常。C++ 当构造函数抛出vector.emplace或vector.emplace\u时会发生什么?,c++,oop,c++11,stl,C++,Oop,C++11,Stl,我有一个类,它在构造时可能引发异常。 我需要这个类的许多对象,我正在用emplace_返回的向量来构造它们。如果构造函数抛出会发生什么?看起来这取决于调用的构造函数 根据本标准第23.3.7.5节,如果自定义构造函数抛出以下内容,则调用emplace_back应无效: template void emplace_back(Args&&…Args); [……] 如果不是由复制构造函数引发异常,请移动 T或的构造函数、赋值运算符或移动赋值运算符 任何输入计算器操作都不会产生任何效果 你能告诉我哪里
我需要这个类的许多对象,我正在用emplace_返回的向量来构造它们。如果构造函数抛出会发生什么?看起来这取决于调用的构造函数 根据本标准第23.3.7.5节,如果自定义构造函数抛出以下内容,则调用
emplace_back
应无效:
template void emplace_back(Args&&…Args);
[……]
如果不是由复制构造函数引发异常,请移动
T或的构造函数、赋值运算符或移动赋值运算符
任何输入计算器操作都不会产生任何效果
你能告诉我哪里可以买到C++11标准吗?看起来非常有用的是免费提供的C++11工作草案,它非常接近官方的C++11标准。这里的“无效果”是什么意思?在我的程序中,一个普通构造函数在由
无序映射.emplace
构造时抛出一个异常(我想它的指定方式类似于向量.emplace\u back
?),它会使程序崩溃,但没有显示抛出的异常。这是指定的行为吗?我猜“无效果”意味着如果捕获异常并处理它,容器不应该因为整个过程而改变。(如果您的异常被捕获并处理后仍导致程序崩溃,这可能是另一个问题?)
template <class... Args> void emplace_back(Args&&... args);