Si estoy creando un nuevo proyecto en C++ no administrado, Visual Studio 2008 o superior, ¿con qué modelo de manejo de excepciones quiero ir?Código no administrado de Visual C++: ¿Utiliza/EHa o/EHsc para las excepciones de C++?
Entiendo que la opción/EHa da como resultado un código menos eficiente y también detecta excepciones SEH, ¿no?
Así que me he estado desviando de esa opción y normalmente voy con/EHsc, de modo que solo estoy atrapando excepciones de C++ que realmente se lanzan y no detectan violaciones de acceso y otras ejecuciones estructuradas, en catch (...) manejadores. Si hay una infracción de acceso en mi código, no quiero que esté enmascarado por un catch (...) {}.
Cifro con otros que quieren catch (...) {} para no hacer nada e incluso quieren que lo haga si hay una infracción de acceso, lo cual me parece una muy mala idea. Si hay un error debido a una mala codificación, no se debe meter los dedos en los oídos y decir en voz alta "¡La la la la la!" para que no tengas que bloquear el programa? De hecho, si el código ahora está en mal estado debido a un error de codificación, ¿realmente desea que el código continúe?
Así que mi opinión general es que/EHa crea un código más grande/más lento y permite a los programadores salirse con la suya escribiendo código que si hay un error fatal presente, continuará ejecutándose en un estado indefinido.
BTW, estoy hablando de aplicaciones y código de servicio que es lo que estamos escribiendo en su mayor parte. No controladores de dispositivos de bajo nivel ni nada de eso.
Por favor, comparta sus ideas.
En ningún caso debe tratar de detectar violaciones de acceso. –
Eso es lo que entiendo ... pero tengo personas que escriben catch (...) {} y si/EHa es seleccionado, eso enterraría la violación de acceso que creo. Una cosa es atrapar (...) {cleanup_stuff; lanzar; } pero incluso en ese caso, si se trata de una violación de acceso, ¿está seguro de que cleanup_stuff hará su trabajo? Estás en un mal estado, por lo que probablemente creo que el programa es mejor simplemente estrellarse allí. – MarkS
Estoy trabajando en un sistema cliente/servidor donde si el servidor tiene una excepción (idealmente, cualquier excepción, incluida la infracción de acceso), me gustaría enviar el mensaje de excepción al cliente antes de permitir que se cuelgue el hilo del servidor. De lo contrario, el servidor simplemente deja de responder. –