繁体   English   中英

对相关类型强制转换的dynamic_cast成功

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

  1. 如何释放不相关的对象指针?
  2. ptr2 (指针从A*b* )的函数调用方式。

您在这里所做的是未定义的行为。 dynamic_cast无法将对象转换为目标类型时,它会返回一个空指针。 由于AB是不相关的类型,因此dynamic_cast确实返回空指针。

由于在取消引用之前不检查ptr2的值,因此所有押注都是关闭的。 您已取消引用了空指针,因此您的程序可能会或可能无法运行,否则可能会导致崩溃。 任何事情都可能发生,但是您的程序的行为均无效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM