Я понимаю преимущества использования обработки исключений на C++, и я знаю, что это может быть сложно. Одно из правил гласит, что каждая функция может бросить. Хорошо, но есть ситуации, когда мы хотим убедиться, что эта функция не выбрасывает. Я ищу любую известную практику или рекомендации по работе с такими ситуациями. Примеры:Рекомендации по обработке исключений для 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 справа?
Или, может быть, я полностью отжимаю? :)
Предложение книги: «Исключительный C++» от Herb Sutter –