派生类在创建对象时会先调用基类的构造函数,调用的顺序和继承基类的顺序相同,然后才会调用自己的构造函数。
在派生类中,析构函数各部分的执行顺序和构造函数的调用顺序刚好相反,即派生类的析构函数先对其新增的一般成员进行析构,然后对新增的成员对象进行析构,最后按照与其“继承基类相反的顺序”调用基类的析构函数。
当一个类有派生类时,该类的析构函数必须是虚析构函数,否则会有资源释放不完全的问题。
虚析构函数的作用就是可以使用基类指针删除派生类对象。
定义一个基类指针p,在delete p时,如果基类的析构函数是虚函数,这时只会看到p所赋值的对象,如果p赋值的对象是派生类对象,就会调用派生类的析构函数,再调用基类的析构函数。如果p赋值的对象是基类对象,就会调用基类的析构函数,这样就可以避免内存泄露。
如果基类的析构函数不是虚函数,在delete p的时候调用析构函数,只会看到指针的数据类型,而不会去看赋值的对象类型,这样就会造成内存泄露。
参考:https://www.cnblogs.com/duwenxing/p/7483133.html
https://blog.csdn.net/xld_hung/article/details/76776497