Обработка исключений: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Содержимое удалено Содержимое добавлено
Dm (обсуждение | вклад) →Достоинства и недостатки: стилевые правки |
Dm (обсуждение | вклад) м →Достоинства и недостатки: викификация |
||
Строка 133:
Корректная реализация исключений может быть затруднительной в языках с автоматическим вызовом [[деструктор]]ов. При возникновении исключения в блоке необходимо автоматически вызвать деструкторы объектов, созданных в данном блоке, но только тех, которые не были ещё удалены обычным порядком. Кроме того, требование прерывания текущей операции при возникновении исключения вступает в противоречие с требованием обязательного автоматического удаления в языках с автодеструкторами: если исключение возникнет в деструкторе, то либо компилятор будет вынужден удалить не полностью освобождённый объект, либо объект останется существующим, то есть возникнет [[утечка памяти]]. Вследствие этого генерация неперехватываемых исключений в деструкторах в ряде случаев просто запрещается.
Также в сложных программах возникают большие «нагромождения» операторов <code>try ... finally</code> и <code>try ... catch</code> (<code>try ... except</code>), если не использовать аспекты.
|