この質問はかなり古く、すでに十分に回答されていますが、C ++ 11で適切な例外処理を実行する方法に関するメモを追加したいのは、例外に関する議論でこれが欠けているためです。
StackOverflowのこことここで、ネストされた例外を再スローする適切な例外ハンドラーを作成するだけで、デバッガーや面倒なロギングを必要とせずに、コード内の例外のバックトレースを取得する方法について説明しています。
派生した例外クラスでこれを行うことができるため、そのようなバックトレースに多くの情報を追加できます!GitHubで私のMWEを確認することもできます。バックトレースは次のようになります。
Library API: Exception caught in function 'api_function'
Backtrace:
~/Git/mwe-cpp-exception/src/detail/Library.cpp:17 : library_function failed
~/Git/mwe-cpp-exception/src/detail/Library.cpp:13 : could not open file "nonexistent.txt"
std::runtime_error
例外がスローされたときに多くの情報を取得するためにサブクラスを作成する必要すらありません。
(を使用する代わりにstd::runtime_error
)サブクラス化で私が見る唯一の利点は、例外ハンドラーがカスタム例外をキャッチして特別なことを実行できることです。例えば:
try
{
// something that may throw
}
catch( const MyException & ex )
{
// do something specialized with the
// additional info inside MyException
}
catch( const std::exception & ex )
{
std::cerr << ex.what() << std::endl;
}
catch( ... )
{
std::cerr << "unknown exception!" << std::endl;
}