析构函数一般写成虚函数的原因

直观的讲:是为了降低内存泄漏的可能性.
举例来说就是,⼀个基类的指针指向⼀个派⽣类的对象,在该对象的生命周期结束时,若基类的析构函数没有定义成虚函数,那 么编译器根据指针类型就会认为当前对象的类型是基类,调⽤基类的析构函数 (该对象的析构函数的函数地址早就被绑定为基类的析构函数),仅执行基类的析构,派⽣类的自身内容将无法被析构,造成内存泄漏.
如果基类的析构函数定义成虚函数,那么编译器就可以根据实际对象,执行派生类的析构函数,再执行基类的析构函数,成功释放内存


4.1 追问: 析构函数可以是纯虚函数吗?

析构函数可以是纯虚的,但纯虚析构函数必须有定义体,因为析构函数的调用是在子类中隐含的