Должен ли я использовать std :: cerr и exit () вместо исключения? - PullRequest
0 голосов
/ 01 июня 2019

Я относительно новичок в C ++, и мне просто интересно, каковы основные различия между простым генерированием исключения или написанием std :: cerr и exit ()?Я знаю, что если исключение не поймано, программа закроется.Есть ли варианты использования для std :: cerr или я должен всегда генерировать исключения?Или я вообще не должен использовать std :: cerr?Существуют ли передовые практики для этого?

throw std::runtime_error("runtime error msg");

ИЛИ

std::cerr << "cerr error msg";
exit(1);                      

Обе версии в порядке?

1 Ответ

2 голосов
/ 01 июня 2019

Основное различие между ними заключается в том, что вы можете перехватывать и обрабатывать исключения (повышать с помощью throw). Есть два плюса для этого действия:

A. Вы можете генерировать исключение и обрабатывать его, не прерывая работу вашей программы.

B. При обработке исключения они будут автоматически вызывать деструкторы ваших объектов. Например:

try {
    A a;
    throw runtime_error("A"); // Throw exception A
} catch (...) { // Catch exception A & Call a's object destructor.
    throw runtime_error("B"); // Throw exception B and crush (if no one else catch it).
}

Вы хотите использовать throw, а не exit(1), если вы думаете о дальнейшей работе над этим кодом (или если кому-то еще нужно продолжить работу над этим кодом).

Подробнее см .: Деструкторы запускаются при вызове exit ()? & Деструкторы вызываются после броска в C ++?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...