RAII здесь помогает. Самое важное, что здесь не нужно делать, это «выйти из области видимости» - это не обязательно просто раскрутка стека. При выходе из блока try, как обычно, так и через исключение, вызывается деструктор. Каждый раз, когда ваша переменная выходит из области видимости, вызывается ее деструктор.
Редактировать
Хм, похоже, вопрос был отредактирован, чтобы сосредоточиться на SEH (не C ++ исключений). В этом случае код деструктора может не сработать. Однако, как отмечали другие, большинство исключений, не относящихся к C ++, эквивалентны сбоям приложений. Возможно, нецелесообразно реагировать на эти исключения каким-либо вменяемым образом, кроме как в случае сбоя. В этом случае ваше приложение закрывается и ваш критический раздел все равно будет уничтожен.
См. Ответ @ JaredPar, чтобы найти хорошее решение для перевода исключений C SEH в исключения C ++ для Windows.