当前位置: 首页C++C++面向对象正文 为什么基类的析构函数需要定义为虚函数? C++面向对象 0 5.9K 为了实现动态绑定,基类指针指向派生类对象,如果析构函数不是虚函数,那么在对象销毁时,就会调用基类的析构函数,只能销毁派生类对象中的部分数据,所以必须将析构函数定义为虚函数,从而在对象销毁时,调用派生类的析构函数,从而销毁派生类对象中的所有数据。 C++面向对象 帅地永久会员 打赏 收藏 海报挣佣金 推广链接
评论(3)
如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码。
虚析构或纯虚析构就是用来解决通过父类指针释放子类对象。
如果子类中没有堆区数据,可以不写为虚析构或纯虚析构。
基类指针可以指向派生类的对象(多态性),如果删除该指针delete []p;就会调用该指针指向的派生类析构函数,而派生类的析构函数又自动调用基类的析构函数,这样整个派生类的对象完全被释放。如果析构函数不被声明成虚函数,则编译器实施静态绑定,在删除基类指针时,只会调用基类的析构函数而不调用派生类析构函数,这样就会造成派生类对象析构不完全
如果析构函数不被声明成虚函数,则编译器实施静态绑定,在删除基类指针时,只会调用基类的析构函数而不调用派生类析构函数,这样就会造成派生类对象析构不完全。所以,将析构函数声明为虚函数是十分必要的。