На этом шаге мы рассмотрим общие правила использования блока try...finally.
Блок try...finally позволяет обеспечить выполнение группы операторов, завершающих решение какой-то подзадачи, независимо от того, возникла ли исключительная ситуация при обработке операторов, реализующих эту подзадачу, или нет. Неформально этот блок можно представить в следующем виде:
try <СписокОператоров1> finally <СписокОператоров2> end;
Опишем принцип работы блока try...finally. Если в процессе обработки СпискаОператоров1 ошибок времени выполнения не происходит, то после обработки последнего оператора этого списка управление естественным образом переходит на первый оператор СпискаОператоров2 блока try...finally. Если же при выполнении какого-либо оператора СпискаОператоров1 между зарезервированными словами try и except возникает исключительная ситуация, то оставшиеся операторы СпискаОператоров1 пропускаются, и управление сразу передается на первый оператор блока обработки исключения, расположенный за ключевым словом finally.
Наиболее характерным случаем использования блока try...finally является освобождение памяти, распределенной динамически при решении определенной подзадачи проекта. Это позволяет избежать накопления "динамического мусора" при возникновении исключений в процессе работы проекта.
На следующем шаге мы рассмотрим совместное использование рассмотренных блоков.