La principal excepción para arrojar algo derivado de std::exception
sería si está utilizando algún marco (por ejemplo, MFC) con su propia jerarquía de excepciones. En ese caso, generalmente desea derivar de un lugar apropiado en su jerarquía.
Tenga en cuenta que no estoy intentando especialmente mantener MFC como un ejemplo de manejo limpio de excepciones (o diseño limpio en general), solo un ejemplo de un marco que incluye una jerarquía de excepciones. Cuando usa un marco que ya define una jerarquía de excepciones, generalmente es mejor usarlo.
En otras palabras, a diferencia de la preferencia en C++ de lo contrario, generalmente se acepta que las excepciones deben ser una única jerarquía monolítica con una sola raíz. Para la biblioteca estándar, esa única raíz es std::exception
, pero otros marcos tienen alternativas, y si proporcionan una, generalmente quiere que la suya sea la suya.
¡No arroje cuerdas ni tuercas! Si siempre lanza subclases de 'std :: exception', puede poner una cláusula catch-all en' main' que maneja todas las excepciones que no se manejan en ninguna otra parte e imprime el 'what()' de la excepción. –