catch(...)
перехватывает все исключения.
Обычно вы этого не захотите.Вы понятия не имеете, что вы только что поймали, и если вы выходите из блока catch, вы просто молча игнорируете какую-то ошибку.Это может привести к очень плохим вещам, происходящим позже.Поскольку вы понятия не имеете, какая ошибка только что произошла, у вас нет способа ее исправить, и поэтому единственно разумным решением является либо разрешить продолжение исключения (повторно вызвать его), либо прервать выполнение программы (вызов * 1006).* или exit()
).
Однако, если у вас есть какая-то очистка, которую вам нужно выполнить, может быть разумно перехватить все исключения, выполнить очистку, а затем повторно выбросить исключение:
try {
// ...
} catch (...) {
abortTransaction();
throw;
}
Тем не менее, обычно лучше использовать так называемые RAII-классы для автоматизации этой очистки:
DBTransaction txn = db.StartTransaction();
// do stuff that may throw; if it throws, txn will be destroyed,
// and its destructor can abort the transaction
// As such, an explicit try { } catch(...) { } isn't needed