虚析构函数必要性

虚析构函数必要性
未声明virtual:
#include  < iostream >
#include 
< cstdlib >
using   namespace  std;

class   base
{
    
public:
        
~base(){cout<<"base destr"<<endl;}
}
;

class  derived : public   base
{
    
public:
        
~derived(){cout<<"derived destr"<<endl;}
}
;

int  main()
{
    
base *pb = new derived();
    delete pb;
    system(
"PAUSE");
    
return 0;
}

声明virtual:
#include  < iostream >
#include 
< cstdlib >
using   namespace  std;

class   base
{
    
public:
        
virtual ~base(){cout<<"base destr"<<endl;}
}
;

class  derived : public   base
{
    
public:
        
virtual ~derived(){cout<<"derived destr"<<endl;}
        
        
//~derived(){cout<<"derived destr"<<endl;} //不加virtual也可以,默认会继承 
}
;

int  main()
{
    
base *pb = new derived();
    delete pb;
    system(
"PAUSE");
    
return 0;
}

你可能感兴趣的:(虚析构函数必要性)