Немногие языки или фреймворки могут хорошо справиться с обработкой исключения, возникающего при очистке от более раннего исключения. Эффективная обработка таких ситуаций потребовала бы, чтобы код очистки знал, какое исключение, если таковое имеется, произошло на «главной линии». Концептуально было бы совсем не трудно предоставить такую информацию для очистки кода, но фреймворки, как правило, не предоставляют ее.
В противном случае нормальное поведение в C ++ состоит в том, чтобы резко сбить систему, когда исключение происходит во время очистки от другого исключения; Языки Java и .NET обычно отказываются от любых ожидающих исключений, если происходит исключение очистки. Новые версии Java, однако, включают функцию, которая (если используется) будет обрабатывать такие вещи намного лучше. В блоке try-with-resources исключение, которое возникает при очистке ресурсов, когда другие исключения не ожидают обработки, будет обрабатываться нормально; однако, если исключение находилось в состоянии ожидания, ожидающее исключение останется в состоянии ожидания, но новое исключение будет добавлено в его список «исключенных исключений». Было бы неплохо, если бы был способ указать, что определенный блок finally
должен вести себя так же, но я не знаю какой-либо функции для этого.