虚析构函数和析构函数中的虚机制

来源:互联网 发布:wifi迅雷网络异常 编辑:程序博客网 时间:2024/05/29 14:46

虚析构函数:

       虚析构函数是为了解决基类指针指向派生类对象,并用基类指针删除派生类对象时能够完全释放内存。

        class A1{

            public:

             ~A1(){cout<<"A1"<<endl;}

};

       class A2{

           public:
                virtual ~A2(){cout<<"A2"<<endl;}

} ;

       class B1:public A1{

            public:

                ~B1(){cout<<"B1"<<endl;}

};

      class B2:public A2{

             public:

                 ~B2(){cout<<"B2"<<endl;}

};

       int main(){

       A1* a1=new B1;

       A2* a2=new B2;

       delete a1;  //调用基类析构函数,显示:A1(派生类并没有被删除)

       delete a2;  //先调用派生类析构函数,再调用基类虚析构函数。显示:B2 A2

       return 0;

}


一般来说,如果类中不包含虚函数,就表示这个类不作为基类使用。


如果声明纯虚的析构函数,则必须为纯虚析构函数提供一个函数体。纯虚析构函数的作用是可以使基类成为一个抽象类,不能创建基类对象。



析构函数的虚机制:


对于在析构函数中调用虚函数,则虚函数机制将被忽略,即只调用本地版本。如果虚机制存在。则析构函数从派生类到基类按层次调用,可能会出现被调用的函数操作在已经被删除的对象上。(例如基类析构函数中的虚函数调用派生类版本,此时派生类已经被删除)

0 0
原创粉丝点击