Par habitude de vérifier les pointeurs nuls, j'ai parfois écrit:
MyClass * c = someBasePtr ? dynamic_cast<MyClass*>(someBasePtr) : 0;
if (c) {...
En effet, vérifier un pointeur nul avant de passer à une distribution dynamique, et également vérifier le retour.
J'ai ensuite lu dans la documentation MSDN
Une valeur de pointeur null est convertie en valeur de pointeur null du type de destination par dynamic_cast.
Il semble alors que je pourrais retirer la construction?: En toute sécurité. Est-ce C++ portable?
Telle que le nouveau code serait
MyClass * c = dynamic_cast<MyClass*>(someBasePtr);
if (c) {...
Bien sûr, en supposant que someBasePtr est soit nul soit valide, c'est-à-dire pas wild pointant vers des ordures ...
§5.2.7/4:
Si la valeur de v est une valeur de pointeur nulle dans le cas du pointeur, le résultat est la valeur de pointeur nulle de type R.
Vous n'avez donc pas à vérifier vous-même un pointeur nul. Il en va de même pour l'opérateur delete, la suppression d'un pointeur nul n'a aucun effet.
Oui, vous pouvez utiliser dynamic_cast
sur un pointeur nul.
Oui, vérifiez 5.2.7.4 en standard.