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

    科技2022-07-11  120

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

    结果:

     

    Processed: 0.010, SQL: 8