Ограничения обработчиков завершения
Оператор нельзя использовать для перехода к __try
блоку goto
инструкций или блоку инструкций__finally
. Входить в этот блок необходимо только через обычный поток управления. (Однако вы можете выйти из блока инструкций __try
.) Кроме того, нельзя вложить обработчик исключений или обработчик завершения в __finally
блок.
Некоторые виды кода, разрешенного в обработчике завершения, создают сомнительные результаты, поэтому их следует использовать с осторожностью, если вообще. Один из них — это goto
инструкция, которая выходит из блока инструкций __finally
. Если блок выполняется как часть нормального завершения, ничего необычного не происходит. Но если система распаковывает стек, это отменяет очистку. Затем текущая функция получает контроль, как если бы не было ненормального завершения.
Оператор return
внутри блока инструкций __finally
представляет примерно ту же ситуацию. Элемент управления возвращается непосредственно вызывающей функции, содержащей обработчик завершения. Если система отмотывает стек, этот процесс останавливается. Затем программа продолжается, как если бы исключение не было создано.
См. также
Написание обработчика завершения
Structured Exception Handling (C/C++)
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по