020--C++养成之路(多态:虚析构)
原创
©著作权归作者所有:来自51CTO博客作者西南第一深情李登门的原创作品,请联系作者获取转载授权,否则将追究法律责任
笔记:虚析构函数(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;
}
结果:
使用了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;
}
结果: