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は決して呼び出されませんでした。 –