c++ - ¿Cómo falla dynamic_cast?
dynamic-cast (1)
dynamic_cast
devolverá NULL en una conversión incorrecta si está lanzando un puntero; lanzará std::bad_cast
al lanzar referencias . Es un error de tiempo de compilación intentar convertir objetos con dynamic_cast
(por ejemplo, con dynamic_cast<Derived>(base)
)
De acuerdo con lo que leí, la ejecución de un dynamic_cast en tiempo de ejecución incorrecto puede lanzar una excepción de bad_cast o devolver cero.
¿Es correcto decir que devolverá cero si está lanzando punteros?
es decir:
class Base { virtual void a(){} };
class Derived: public Base {};
int main () {
Base *base = new Base();
dynamic_cast<Derived*>(base);
return 0;
}
¿Y que lanzará una excepción de bad_cast al lanzar objetos?
es decir:
class Base { virtual void a(){} };
class Derived: public Base {};
int main () {
Base base;
Base& ref = base;
dynamic_cast<Derived&>(ref);
return 0;
}