Si alguien ha heredado de std :: exception y anulado qué devolver NULL, entonces esto es posible.
class CMyException : public std::exception
{
...
virtual const char * what() const {return NULL;}
};
A pesar de encontrar excelente en el estándar de Neil, podría ser bueno comprobar si es NULO. Aunque las especificaciones de las clases secundarias de std :: exception indican que no deben devolver un valor NULL, nada en el compilador hará cumplir esto y el código anterior seguirá siendo legal según el idioma.
Esto puede ser una situación ideal para utilizar una aserción ...
assert(except.what() != NULL);
o
if (except.what() != NULL)
{
... normal processing ...
}
else
{
assert(false);
}
porque se trata de un caso en el que algo probablemente nunca llegase a ocurrir, y que está suponiendo que no debería suceder, pero aún me gustaría saber (en modo de depuración) cuando se demuestra que sus suposiciones son incorrectas. Entonces puede abordar su suposición incorrecta o abordar el código incorrecto que puede ir en contra de su suposición (asegúrese de que() no devuelva NULL).
Pero si overwridde qué y que es capturado por solo const std :: exception y luego puede ser NULL, por lo que probablemente sea mejor verificarlo ¿verdad? –
Es virtual, así que es posible que los programadores malos lo hagan NULL – JaredPar
Interesante. Ahora, dado que sé que a algunas personas les gusta implementar lo que a través de un std :: string y el método c_str() allí, tengo que preguntar: ¿puede c_str() una cadena std :: adecuadamente construida alguna vez devolver NULL? (Pregunto porque tengo esta situación en la base de código con la que trabajo y quiero saber si necesito agregar algunas TODO o no). –