When dynamic_cast will throw exception in case used with pointer?

Rajesh Subramanian picture Rajesh Subramanian · May 10, 2013 · Viewed 19.5k times · Source

I am using dynamic_cast in my source to cast pointer as some thing like below,

Base *base = here storing the pointer;

Derived *derived = dynamic_cast<Derived*>(base);

In the case of base doesn't have the pointer of the class hierarchy then cast fails and returns NULL. In next lines I am checking NULL. So no issues.

I came across a crash dump, my application crashed due to the dynamic_cast throws exception.

I know dynamic_cast will throw only when used with reference types.

Any idea when the dynamic_cast can throw exception when used with pointer as I used in above source?enter image description here

Answer

Lightness Races in Orbit picture Lightness Races in Orbit · May 10, 2013

Any idea when the dynamic_cast can throw exception when used with pointer as I used in above source?

In a well-defined program, it cannot. The standard does not allow it:

[C++11: 5.2.7/9]: The value of a failed cast to pointer type is the null pointer value of the required result type. A failed cast to reference type throws std::bad_cast (18.7.2).

However, if you pass dynamic_cast an invalid pointer, then you invoke undefined behaviour and anything may happen, including some implementation-defined C++ exception, or a runtime crash.