【发布时间】:2017-02-01 09:56:55
【问题描述】:
std::vector<>::emplace_back() 中抛出异常时会发生什么?
例如:
class Foo {
public:
Foo(int bar) {
if (bar == 4) throw std::exception("Something went wrong");
}
}
和
std::vector<std::unique_ptr<Foo>> foo_list;
foo_list.emplace_back(new Foo(3));
try {
foo_list.emplace_back(new Foo(4));
} catch (std::exception error) {
// How bad is it?
}
// Whats inside foo_list now?
我希望向量只包含第一个 Foo 对象。
是这样吗?这是标准保证的吗?
还有:会不会有内存泄漏?
【问题讨论】:
-
emplace_back 在抛出异常时没有运行...
-
您必须在调用函数之前评估函数参数。构造函数首先抛出。 emplace_back 从未被调用过。
-
@Kenny:有道理,比我想象的要简单!我会在回答时接受它...
-
标题有点误导,因为正如其他人指出的那样,异常实际上发生在
emplace_back被调用之前。
标签: c++ c++11 exception vector emplace