私はC++での例外処理の利点を理解しており、扱いにくいかもしれません。ルールの1つは、すべての機能がスローされる可能性があるということです。しかし、関数が投げていないことを確認したい状況があります。このような状況を処理するためのよく知られた慣行やガイドラインを探しています。例:C++の例外処理ガイドライン
try
{
// do something
}
catch (std::runtime_error& error)
{
save_log (error);
emit_dbus_signal (error);
}
save_log()
またはemit_dbus_signal()
が失敗した場合、私は気にしない、私は、私はそれらを呼び出すしようとしたことを、確認します。
ThreadPool thread_pool;
SocketsPool socket_pool;
MainLoop main_loop;
try
{
thread_pool.init();
socket_pool.init();
main_loop.run();
}
catch (std::runtime_error& error)
{
save_log (error);
emit_dbus_signal (error);
}
thread_pool.finalize();
socket_pool.finalize();
私は私がthread_pool
とsocket_pool
を確定しようとしたことを、確認します。ファイナライズ処理中のエラーは、finalize()
メソッド内で処理する必要があります。
私は覚えていますが、どの機能はスローされませんが、小さなプログラムでのみ機能します。 _nothrow
のような接尾辞をそのような「非投げ」関数の名前に追加し、コードを書いている間これを処理すべきですか?例外仕様はC++ 11以降で廃止されましたので、避けたいと思います。 noexcept
はどうですか?私はこの新機能を理解しているかどうかまだ分かりません。それは私が探しているものですか?
C++ 11ではコンパイル時にチェックがありません。
または、私は完全に絞っていますか? :)
予約の提案:Herb Sutterの "Exceptional C++" –