C++に関するいくつかのメモを読んでいて、次の質問に出くわしました
Q: コンストラクターは例外をスローできますか? コンストラクターが失敗したときにエラーを処理する方法は?
A:コンストラクターがエラーをスローすることはありません。
今、この答えは私を混乱させました.オンラインに行って、コンストラクターからいつでも例外をスローできることを確認するために. これがメモのタイプミスであるかどうか、そして重要なものを見逃していないかどうかを確認したかっただけです。
もちろん、それは可能です。標準のコンテナー (例: ) でさえ、コンストラクターからstd::vector
スローされます。std::bad_alloc
このFAQは真実を語っています。
コンストラクター全般について話している場合、メモは間違っています。Ctors は確かに普通に投げることができます。おそらくそれは、スローされない構築を保証する特定のクラスについて議論していたのでしょうか?
一方、デストラクタがスローしないようにコーディングすることを強くお勧めします。そうすることは合法ですが、スタックの巻き戻し中に例外をスローすると、すぐにプログラムが終了します (への呼び出しstd::terminate
)。