2-4虚析构函数
目录
1.为什么引进虚析构函数?
使用new关键字创建一个基类指针用来调用派生类对象的时候,如果派生类对象在堆中new了一段内存,因为释放基类指针的时候不会调用派生类的析构函数,那么在派生类中的delete也就形同虚设,所以会导致内存泄漏。
将基类、派生类析构函数写成虚析构函数,那么释放基类指针的时候也会调用派生类的虚构函数,派生类申请的内存也会被释放掉。
多态中存在的问题:内存泄漏。
为了解决内存泄漏的问题,引入了虚析构函数,虚析构函数就是用virtual修饰析构函数。
析构函数:~ClassName();
虚析构函数:virtual ~ClassName();
2.virtual在函数中的使用限制
(1)不能用来修饰普通函数(全局函数)
普通函数不能是虚函数。
(2)不能用来修饰静态成员函数
静态成员函数不能是虚函数。
(3)不能用来修饰内联函数
内联函数不能是虚函数,编译器会忽略掉inline关键字,成为纯粹的虚函数。
(4)不能用来修饰构造函数
构造函数不能成为虚函数。