[英]dynamic_cast working on related types casting is sucess
#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*
)的函数调用方式。 您在这里所做的是未定义的行为。 dynamic_cast
无法将对象转换为目标类型时,它会返回一个空指针。 由于A
和B
是不相关的类型,因此dynamic_cast
确实返回空指针。
由于在取消引用之前不检查ptr2
的值,因此所有押注都是关闭的。 您已取消引用了空指针,因此您的程序可能会或可能无法运行,否则可能会导致崩溃。 任何事情都可能发生,但是您的程序的行为均无效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.