虚析构和纯虚析构
多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到哦子类的析构代码
解决:将父类中的析构函数设置为虚析构或者纯虚析构
虚析构与纯虚析构的共性:
- 可以解决父类指针释放子类对象
- 多需要有具体的函数实现
区别:
虚析构语法:
virtual ~类名(){}
纯虚析构语法:
类内:
virtual ~类名()=0;
类外:
类名::~类名()
{
//函数实现
}
总结:
- 虚析构或纯虚析构就是用来解决通过父类指针释放子类对象
- 如果子类中没有堆区数据,可以不写为虚析构或纯虚析构
- 拥有虚析构函数的类也属于抽象类