Se qualcuno ha ereditato da std :: exception e sovrascritto cosa restituire NULL, quindi questo è possibile.
class CMyException : public std::exception
{
...
virtual const char * what() const {return NULL;}
};
Nonostante eccellente hotel di Neil nella norma, potrebbe essere ancora buono per verificare la presenza di NULL. Sebbene le specifiche di quali classi figlio di std :: state non debbano restituire un valore NULL, nulla nel compilatore imporrà questo codice e il codice sopra sarà comunque legale in base alla lingua.
Questa può essere una situazione ideale per utilizzare un'asserzione ...
assert(except.what() != NULL);
o
if (except.what() != NULL)
{
... normal processing ...
}
else
{
assert(false);
}
perché questo è un caso in cui qualcosa probabilmente non dovrebbe mai mai accadere, e si è ammesso che non dovrebbe accadere, ma vorrebbe comunque sapere (in modalità di debug) quando le tue ipotesi sono mostrate sbagliate. Quindi puoi indirizzare il tuo assunto errato o indirizzare il codice errato che potrebbe andare contro la tua ipotesi (assicurati che what() non restituisca NULL).
fonte
2009-06-24 13:50:58
Ma se si overwridde cosa ed è catturato da solo const std :: exception e quindi può essere NULL, quindi probabilmente è meglio controllare bene? –
È virtuale, quindi è possibile che i programmatori malintenzionati lo rendano NULL – JaredPar
Interessante. Ora, dal momento che so che alcune persone amano implementare ciò che tramite un metodo std :: string e il metodo c_str(), devo chiedere - può c_str() di un valore correttamente restituito NULL? (Chiedo perché ho questa situazione nella base di codice con cui lavoro e voglio sapere se devo aggiungere qualche TODO o no). –