构造函数,析构函数在派生类中的执行顺序,和继承虚函数的结合,为什么会有虚析构函数?

派生类在创建对象时会先调用基类的构造函数,调用的顺序和继承基类的顺序相同,然后才会调用自己的构造函数。

在派生类中,析构函数各部分的执行顺序和构造函数的调用顺序刚好相反,即派生类的析构函数先对其新增的一般成员进行析构,然后对新增的成员对象进行析构,最后按照与其“继承基类相反的顺序”调用基类的析构函数。

当一个类有派生类时,该类的析构函数必须是虚析构函数,否则会有资源释放不完全的问题。

虚析构函数的作用就是可以使用基类指针删除派生类对象。

定义一个基类指针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

猜你喜欢

转载自www.cnblogs.com/conanpeng/p/12795805.html