Основное различие между ними заключается в том, что вы можете перехватывать и обрабатывать исключения (повышать с помощью 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 ++?