笔记:虚析构函数(virtual)
没使用virtual:
#include<iostream>
#include<string>
using namespace std;
//虚析构
class A{
public:
A(){
cout<<"A构造"<<endl;
}
~A(){
cout<<"A析构"<<endl;
}
};
class B:public A{
int* p;
public:
B(){
p=new int(10);
cout<<"B构造"<<endl;
}
~B(){
if(p){
delete p;
}
cout<<"B析构"<<endl;
}
};

int main(){
A* a=new B();
delete a;
getchar();
return 0;
}


结果:

020--C++养成之路(多态:虚析构)_虚析构函数

使用了virtual:
#include<iostream>
#include<string>
using namespace std;
//虚析构
class A{
public:
A(){
cout<<"A构造"<<endl;
}
virtual ~A(){
cout<<"A析构"<<endl;
}
};
class B:public A{
int* p;
public:
B(){
p=new int(10);
cout<<"B构造"<<endl;
}
~B(){
if(p){
delete p;
}
cout<<"B析构"<<endl;
}
};

int main(){
A* a=new B();
delete a;
getchar();
return 0;
}


结果:

020--C++养成之路(多态:虚析构)_#include_02