#include <iostream>
#include <typeinfo>
using namespace std;
class A
{
virtual void dummy() {};
void f()
{
cout << endl << "A f()";
}
};
class B
{
public:
void func()
{
int i;
cout << endl << "func() of B";
}
};
int main()
{
A* ptr1;
B* ptr2;
ptr1 = new A;
ptr2 = dynamic_cast<B*>(ptr1);
if (ptr2 == NULL)
cout << endl << "dynamicastfailed";
cout << endl << "Type=" << typeid(ptr2).name();
ptr2->func();
}
dynamic_cast
成功。将指针从A*
转换为B*
后,可以使用指针调用函数。我的问题是:
ptr2
(指针从A*
转换为b*
)。答案 0 :(得分:0)
你在这里发生的是未定义的行为。 dynamic_cast
在无法将对象转换为目标类型时返回空指针。由于A
和B
是不相关的类型,dynamic_cast
确实会返回空指针。
由于您在取消引用之前未检查ptr2
的值,因此所有投注均已关闭。您已取消引用空指针,因此您的程序可能会或可能不会工作,或者它可能会导致崩溃。任何事情都可能发生,但你的程序行为无论如何都无效。