码迷,mamicode.com
首页 > 编程语言 > 详细

c++中为什么析构函数要被设置为虚函数(virtual)

时间:2020-10-21 20:42:11      阅读:21      评论:0      收藏:0      [点我收藏+]

标签:ons   des   child   color   col   继承   oid   cfa   The   

1.如果类A可能会被继承,那么A的析构函数一定要被设置为virtual虚函数;

 原因:如果基类的析构函数不是虚函数,当创建一个基类指针指向一个派生类对象,当释放此基类指针时,子类的析构函数不会被调用;

 如下:

class CFather
{
public:
    CFather();
    virtual ~CFather();
    
public:
    virtual void test();
    //virtual void getHouse() = 0;
    
public:
    int b;
    static const int c = 5;
};

CFather::CFather()
{
    infof("CFather...create! g_test:%d\n", g_test++);
}

CFather::~CFather()
{
    infof("~CFather...destory\n");
}

void CFather::test()
{
    infof("CFather...test\n");
}

class CChild : public CFather
{

public:
    CChild();
    ~CChild();
public:

    void test();
    virtual void getHouse();
private:
    int e;
};

CChild::CChild()
{
    infof("CChild...create:g_test:%d\n", g_test++);
}

CChild::~CChild()
{
    infof("~CChild...destory\n");
}

void CChild::test()
{
    infof("CChild...test\n");
}

void CChild::getHouse()
{
    infof("CChild getHouse\n");
}
int main()
{
    Infra::setPrintLogLevel(6);

    CFather * cpt = new CChild;

    delete cpt;
        
    return 0;
}

输出结果:

CFather...create! g_test:100

CChild...create:g_test:20



 ~CChild...destory

~CFather...destory 

 

c++中为什么析构函数要被设置为虚函数(virtual)

标签:ons   des   child   color   col   继承   oid   cfa   The   

原文地址:https://www.cnblogs.com/weiyouqing/p/13850438.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!