Si Quelqu'un a hérité de std :: exception et a remplacé ce qui doit retourner NULL, alors c'est possible. Malgré l'excellente trouvaille de Neil dans la norme, il pourrait être bon de vérifier la présence de NULL. Bien que les spécifications des classes enfant de l'état std :: exception ne doivent pas renvoyer une valeur NULL, rien dans votre compilateur ne va appliquer cela et le code ci-dessus sera toujours légal selon la langue.
Cela peut être une situation idéale pour utiliser un assert ...
assert(except.what() != NULL);
ou
if (except.what() != NULL)
{
... normal processing ...
}
else
{
assert(false);
}
parce que c'est un cas où quelque chose ne devrait probablement jamais arriver, et vous êtes en supposant qu'il ne devrait pas arriver, mais aimerait quand même savoir (en mode debug) que vos suppositions sont fausses. Ensuite, vous pouvez adresser votre hypothèse incorrecte ou adresser le code incorrect qui pourrait aller à l'encontre de votre hypothèse (assurez-vous que what() ne renvoie pas NULL).
Mais si vous overwridde quoi et il est pris par seulement const std :: exception & puis il peut être NULL, donc probablement préférable de vérifier à droite? –
Il est virtuel mais il est donc possible que les mauvais programmeurs le rendent NULL – JaredPar
Intéressant. Maintenant, comme je sais que certaines personnes aiment implémenter quoi via une chaîne std :: string et la méthode c_str(), je dois demander - est ce que c_str() d'une chaîne std :: correctement construite peut renvoyer NULL? (Je demande parce que j'ai cette situation dans le code que je travaille avec et je veux savoir si je dois aller ajouter quelques TODOs ou pas). –