Q:为什么需要虚析构函数;
A:
首先,熟悉一些动态联编和静态联编,例子,Employee是Singer的基类,像Employee *pe = new Singer;//这就是动态联编意思是基类类型指针指向派生类类型对象。pe只能用户singer中的Employee中的public部分的数据成员。而静态联编就是Empolyee *pe = new Employee;
然后,介绍虚析构函数的作用,为什么需要派生类用虚析构函数,正如动态联编的例子,Employee *pe = new Singer;我们知道在pe想要调用函数时,调用的函数类型的不同会有所区别,如果是非虚函数,则调用的是指针类型的成员函数;如果是虚函数,则调用的是指针指向对象(singer)的虚函数;所以如果Singer中的析构函数不是虚函数,那么pe在释放的时候,直接调用Employee的析构函数,而不会调用Singer的析构函数,从而导致内存泄露。如果Singer中的析构函数是虚函数,则pe首先调用对象类型指向的虚析构函数也是就是先调用Singer的虚析构函数,然后调用Employee的析构函数,这样更加的安全。