ejemplo - dynamic_cast c++
Portably seguro para pasar NULL/cero a dynamic_cast? (3)
§5.2.7 / 4:
Si el valor de v es un valor de puntero nulo en el caso del puntero, el resultado es el valor de puntero nulo de tipo R.
Por lo tanto, usted no tiene que buscar un puntero nulo. Lo mismo ocurre con la eliminación del operador, la eliminación de un puntero nulo no tiene ningún efecto.
Por costumbre, para marcar punteros nulos, a veces he escrito:
MyClass * c = someBasePtr ? dynamic_cast<MyClass*>(someBasePtr) : 0;
if (c) {...
En efecto, la comprobación de un puntero nulo antes de pasar a la conversión dinámica, y también la comprobación de la devolución.
Luego leo en la documentación de MSDN
Dynamic_cast convierte un valor de puntero nulo en el valor de puntero nulo del tipo de destino.
Aparece entonces que podría quitar el?: Construcción segura. ¿Es este 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 nulo o válido, es decir, no es un comodín que apunta a la basura ...
Sí, puedes usar dynamic_cast
en un puntero nulo.
Sí, verifique 5.2.7.4 en el estándar.