Ограничения обработчиков завершения

Оператор нельзя использовать для перехода к __try блоку goto инструкций или блоку инструкций__finally. Входить в этот блок необходимо только через обычный поток управления. (Однако вы можете выйти из блока инструкций __try .) Кроме того, нельзя вложить обработчик исключений или обработчик завершения в __finally блок.

Некоторые виды кода, разрешенного в обработчике завершения, создают сомнительные результаты, поэтому их следует использовать с осторожностью, если вообще. Один из них — это goto инструкция, которая выходит из блока инструкций __finally . Если блок выполняется как часть нормального завершения, ничего необычного не происходит. Но если система распаковывает стек, это отменяет очистку. Затем текущая функция получает контроль, как если бы не было ненормального завершения.

Оператор return внутри блока инструкций __finally представляет примерно ту же ситуацию. Элемент управления возвращается непосредственно вызывающей функции, содержащей обработчик завершения. Если система отмотывает стек, этот процесс останавливается. Затем программа продолжается, как если бы исключение не было создано.

См. также

Написание обработчика завершения
Structured Exception Handling (C/C++)