Понятно, т.е. dynamic_cast защищает от небезопасного преобразования, такого как это:
class B {...};
class D : public B {...};
void f()
{
B* pb = new B;
D* pd = dynamic_cast<D*>(pb);
}
Правда, если класс B не содержит виртуальных функций, то выдается ошибка
"error C2683: dynamic_cast : 'B' is not a polymorphic type" (MSVC 2003)
dynamic_cast : 'type' is not a polymorphic type
You cannot use dynamic_cast to convert from a non-polymorphic class (a class with no virtual functions).
You can use static_cast to perform conversions of non-polymorphic types. However, static_cast does not perform a run-time check.
Почему такое происходит?