當在std::vector<>::emplace_back()
中拋出異常時會發生什麼?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在引發異常時未運行... –
http://en.cppreference.com/w/cpp/container/vector/emplace_back請參閱 – Hayt
您必須在調用函數之前評估函數參數。構造函數首先拋出。 emplace_back從未被調用過。 –