make sure the base class has at least one virtual method, include <typeinfo>
and use your current code just with an additional dereferencing, typeid(*b).name()
.
in passing, note that a
typeid
call is the one place in C++ where you can dereference a nullpointer with well-defined behavior, which implies that it can throw an exception:
C++11 §5.2.8/2:
“If the glvalue expression is obtained by applying the unary*
operator to a pointer and the pointer is a null pointer value (4.10), thetypeid
expression throws thestd::bad_typeid
exception (18.7.3).”