Mezclar C (Structured) y C++ Excepciones
Si desea escribir un código más portátil, mediante el control de excepciones estructurado en programa de C++. no se recomienda.Sin embargo, puede que a veces desee compilar con /EHa y para mezclar excepciones y el código fuente estructurados de C++ y, necesita cierta facilidad para administrar ambos tipos de excepciones.Dado que un controlador de excepciones estructurado no tiene el concepto de objetos o de excepciones con tipo, no puede controlar las excepciones producidas por el código de C++; sin embargo, los controladores de C++ Catch pueden controlar excepciones estructuradas.Como tal, la sintaxis del control de excepciones de C++ (intento, throw, Catch) no es aceptada por el compilador de C, pero la sintaxis del control de excepciones estructurado (__try, __except, __finally) es compatible con el compilador de C++.
Vea _set_se_translator para obtener información sobre cómo administrar excepciones estructuradas como excepciones de C++.
Si se mezclan las excepciones estructurada y C++, tenga en cuenta lo siguiente:
Las excepciones de C++ y excepciones estructuradas no se pueden combinar dentro de la misma función.
Se ejecutan los controladores de terminación (bloques de__finally ) siempre, incluso durante desenredo después de que se produzca una excepción.
El control de excepciones de C++ puede detectar y el preserve la semántica de desenredo en todos los módulos compilados con la opción del compilador /EH (esta opción habilita la semántica de desenredo).
Puede haber algunas situaciones en las que las funciones del destructor no se denominan para todos los objetos.Por ejemplo, si una excepción estructurada se produce cuando se intenta realizar una llamada de función a través de un puntero a función inicializado, y esa función toma como objetos de los parámetros que se construidos antes de la llamada, esos objetos no tendrán sus destructores llamados durante pila desenrede.