笔记:虚析构函数(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; }结果: