Por costumbre para el control de punteros nulos, me han escrito a veces:Portably seguro para pasar NULL/zero a dynamic_cast?
MyClass * c = someBasePtr ? dynamic_cast<MyClass*>(someBasePtr) : 0;
if (c) {...
En efecto, la comprobación de un puntero nulo antes de pasar al elenco dinámico, y también comprobar el retorno.
luego leí en la documentación de MSDN
Un valor de puntero nulo se convierte en el valor de puntero nulo del tipo destino mediante moldeado dinámico.
Parece que podría eliminar el?: Constructo de forma segura. ¿Es esto C++ portátil?
tal que el nuevo código sería
MyClass * c = dynamic_cast<MyClass*>(someBasePtr);
if (c) {...
Por supuesto suponiendo que someBasePtr es null o válida, es decir, no salvaje que apunta a la basura ...
1. Como se especifica en 5.2.7/4 – Erik