C++ 虚析构函数的问题

C++ 虚析构函数的问题
一.虚析构函数说明
    一般来说,如果有被子类继承的类,尽可能的加上关键字virtual,特别是以下情况,可能没有调用子类的析
构造成内存泄露.

二.代码示例:
#include  < iostream >
#include 
< conio.h >
using   namespace  std;

class  CBase
{
public:
    
//注意有加virtual与不加virtual运行情况
    virtual ~CBase()
    
{
        cout
<<"CBase destructor!"<<endl;
    }

}
;

class  CChild: public  CBase
{
public:
    
~CChild()
    
{
        cout
<<"CChild destructor!"<<endl;
    }

}
;


int  main( int  argc, char   * argv[])
{
    
/**//*
    以下打印结果是
    CChild destructor!
    CBase destructor!
    
*/

    CChild  
*pchild = new CChild();
    delete pchild;


    
/**//*
    1.以下代码有加virtual运行结果是:
    CChild destructor!
    CBase destructor!
    
    2.去掉virtual运行结果如下:
    CBase destructor!
    可以看到,没有调用CChild的析构函数
    
*/

    CBase 
*pBase = new CChild();
    delete pBase;

    _getch();
    
return 0;
}


你可能感兴趣的:(C++ 虚析构函数的问题)