Вы должны использовать блок try
/ catch
.
Как уже отвечали другие, __try
/ __except
предназначен для отлова SEH (ошибки, генерируемые окнами), а не для отлова общих исключений.
Самое главное, __try
и __catch
могут не запускать деструкторы C ++ или корректно раскручивать стек при возникновении исключения.
За исключением редких случаев, вы никогда не должны пытаться перехватить SEHисключения.
РЕДАКТИРОВАТЬ: Ну, я был уверен в этом (это то, что мне всегда говорили), но @Hans говорит, что, очевидно, есть переключатель компилятора, который вы можете использовать для измененияэтот.Я думаю, что документы по /EHa
вводят в заблуждение или, по крайней мере, не полностью, о том, что здесь происходит.Если кто-то найдет окончательные документы, доказывающие, что это неверно, я с радостью удалю этот ответ.
Даже если окажется, что это неверно, вы все равно должны использовать try
и catch
просто потому, что они стандартные,в то время как __try
и __except
нет.