About virtual destruction

来源:互联网 发布:淘宝店铺手机版模板 编辑:程序博客网 时间:2024/05/19 01:58

        构造函数的调用顺序是:先基类后派生类

        析构函数的调用顺序是:先派生类后基类

        一个类的对象析构时,只能调用到其基类的析构函数,无法调用到其派生类的析构函数。当遇到基类对象析构需要调用到其派生类的析构函数时,将析构函数声明为virtual函数就可以解决这个问题。

 

测试代码:

#include "stdafx.h"

#include<iostream>

#include<string>

using namespace std;

 

class Base

{

public:

    Base()

    {

    }

    virtual ~Base()

    {

       Print();

    }

    virtual void Print()

    {

       cout<< "Base : release";

    }

};

 

class T1:public Base

{

public:

    T1()

    {

    }

    virtual ~T1()

    {

       Print();

    }

    virtual void Print()

    {

       cout << "T1 : release";

    }

};

 

class T2:public T1

{

public:

    T2()

    {

    }

    virtual ~T2()

    {

       Print();

    }

    virtual void Print()

    {

       cout << "T2 : release ";

    }

};

 

int _tmain(int argc, _TCHAR* argv[])

{

    {

       Base T1;

       T1.Print();

    }

    Base* p = new T2;

    delete p;

 

    {

        T1 p;

        p.Print();

    }

 

    system("pause");

    return 0;

}

原创粉丝点击