LINUX.ORG.RU

История изменений

Исправление ilammy, (текущая версия) :

И говоря о забытых исключениях я имею в виду случай, когда где-то в глубине второй операции A используется функция B, которая вызывает C, где используется D. Автор D решил, что о неудаче следует сообщать исключением. Когда автор B писал свою функцию ещё не было никакой A, так что если он и знал о возможном исключении из-за D, то он считал, что оно обработается где-то вверху. А потом кто-то написал свою A и он вообще не в курсе, что где-то там есть исключения.

Если коды возврата используются последовательно, то эта ошибка из D будет или обработана, или возвращена наверх. Автор A не сможет забыть, что если пишешь транзакцию, то надо предусмотреть её откат, если что-то ломается на полпути. Теперь ещё представим, что сейчас B не может сломаться и в коде A лепота без отката изменений. Если кто-то изменит D так, что ошибка теперь возможна, то A просто не скомпилируется. Не получится забыть о том, что D непрямо используется в A и туда теперь надо добавить откат транзакции. А добавить выброс исключения в функцию и не проверить, а нет ли болванов среди вызывающих её,— легко.

Естественно, грамотные люди об этом всегда помнят, транзакции делают правильно, проверяют код выше и ниже по стеку, пишут в комментариях об исключениях, поддерживают их в актуальном состоянии; но ведь тут полтреда речь идёт о полудурках, которым бы только что-то забыть и сломать. С исключениями это сделать проще, так как их не видно в коде и они «где-то обрабатываются». Хотя на самом деле исключения обрабатываются везде, в каждом деструкторе.

Исходная версия ilammy, :

И говоря о забытых исключениях я имею в виду случай, когда где-то в глубине второй операции A используется функция B, которая вызывает C, где используется D. Автор D решил, что о неудаче следует сообщать исключением. Когда автор B писал свою функцию ещё не было никакой A, так что если он и знал о возможном исключении из-за D, то он считал, что оно обработается где-то вверху. А потом кто-то написал свою A и он вообще не в курсе, что где-то там есть исключения.

Если коды возврата используются последовательно, то эта ошибка из D будет или обработана, или возвращена наверх. Автор A не сможет забыть, что если пишешь транзакцию, то надо предусмотреть её откат, если что-то ломается на полпути.

Естественно, грамотные люди об этом всегда помнят и всё делают правильно, но ведь тут полтреда речь идёт о полудурках, которым бы только что-то забыть и сломать. С исключениями это сделать проще, так как их не видно в коде и они «где-то обрабатываются». Хотя на самом деле исключения обрабатываются везде, в каждом деструкторе.