2011-12-21 6 views
5

Actualmente arrojamos solo sobre fallas irrecuperables resultantes de una fuente externa (como datos, por ejemplo) y tenemos un único intento de capturar toda la ejecución.¿Cómo deberían usarse las excepciones en C++ moderno?

Cuándo/Por qué/¿Cómo deberían usarse las excepciones en C++ moderno?

¿C++ 11 cambia la respuesta a la pregunta anterior?

+4

Las excepciones deben ser utilizados para condiciones excepcionales, situaciones que necesitan ser aprobada la pila de llamadas porque no se puede manejar con eficacia ellos en el nivel en que ocurrieron. –

+7

"No me gusta la sintaxis y la complejidad agregada de las excepciones", en lugar de verificar los códigos de error cada vez que llamas a una función. Hay razones para desagradar las excepciones, pero no creo que este sea uno de ellos. –

+0

Las excepciones son excelentes cuando se usan correctamente. Los usamos para cosas como "problemas de configuración", es decir, comenzar un proceso con una mala configuración hará que try/catch in main capture la mala línea de configuración. También los utilizamos extensamente para "errores excepcionales", es decir, si encontramos el formato incorrecto en un flujo de datos conocido, estamos leyendo que es una excepción que queda atrapada en el registro de alto nivel "messge malo" –

Respuesta

2

Respecto a la primera parte de la pregunta (mejores prácticas), la referencia estándar es "Excepción-Cuestiones y técnicas de seguridad" como parte de "Excepcionales C++: 47 Puzzles de ingeniería, problemas de programación y soluciones" de Herb Sutter.

Dirigiéndose a la parte C++ 11 - las referencias siguientes pueden ser útiles: se han añadido características

nuevas excepciones específicas:

http://www2.research.att.com/~bs/C++0xFAQ.html#rethrow

http://www2.research.att.com/~bs/C++0xFAQ.html#noexcept

Incluso aparentemente no relacionada de hecho, las funciones están muy relacionadas en lo que respecta a sus aplicaciones: "Los usos de unique_ptr incluyen la provisión de seguridad de excepción para asignar dinámicamente la memoria d [...]" http://www2.research.att.com/~bs/C++0xFAQ.html#std-unique_ptr

especificaciones de excepción han quedado en desuso: http://herbsutter.com/2010/03/13/trip-report-march-2010-iso-c-standards-meeting/

Cuestiones relacionadas