您的位置:首页 > 其它

虚析构函数

2016-07-13 20:57 211 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/csdn_isme_csdn/article/details/51901447 直接定义变量将存储在栈区,如Fish fish;将在变量的生命周期结束时自动调用自身和基类的析构函数。
如果使用new关键字创建的对象(如 Fish *fish=new Fish()),编译器将不会自动释放相关的资源,需要手动释放, 使用delete fish将调用析构函数,在析构函数里需自行删除相关资源。 但是在多态的情况下,如果直接delete 父类指针,那么子类的析构函数将不会被调用 如下: Class Animal {     ~Animal(){cout<<"Animal destrutor function";} }; Class Fish:Public Animal {     ~Fish(){cout<<"Fish destructor function";} };
Animal *animal=new Fish(); delete animal;//此时将只会调用父类的析构函数,而不会调用子类的析构函数。
为了delete的时候子类的析构函数也能被调用,需要将基类的析构函数定义成虚析构函数。 如果将基类的析构函数声明为虚函数时,由该基类所派生的所有派生类的析构函数也都自动成为虚函数,即使派生类的析构函数与基类的析构函数名字不相同。
如下: Class Animal {    virtual  ~Animal(){cout<<"Animal destrutor function";} }; Class Fish:public Animal {     ~Fish(){cout<<"Fish destructor function";} };
此时delete父类指针的时候将会调用父类析构函数以及子类的析构函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: