使用相关类型转换的dynamic_cast是成功的

时间:2014-12-10 21:37:55

标签: c++ pointers

#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*后,可以使用指针调用函数。我的问题是:

  1. 如何对不相关的对象指针进行投放?
  2. 函数调用如何适用于ptr2(指针从A*转换为b*)。

1 个答案:

答案 0 :(得分:0)

你在这里发生的是未定义的行为。 dynamic_cast在无法将对象转换为目标类型时返回空指针。由于AB是不相关的类型,dynamic_cast确实会返回空指针。

由于您在取消引用之前未检查ptr2的值,因此所有投注均已关闭。您已取消引用空指针,因此您的程序可能会或可能不会工作,或者它可能会导致崩溃。任何事情都可能发生,但你的程序行为无论如何都无效。