2.0 C++远征:虚析构函数

2-4虚析构函数

1.为什么引进虚析构函数?

使用new关键字创建一个基类指针用来调用派生类对象的时候,如果派生类对象在堆中new了一段内存,因为释放基类指针的时候不会调用派生类的析构函数,那么在派生类中的delete也就形同虚设,所以会导致内存泄漏。
将基类、派生类析构函数写成虚析构函数,那么释放基类指针的时候也会调用派生类的虚构函数,派生类申请的内存也会被释放掉。

多态中存在的问题:内存泄漏。

为了解决内存泄漏的问题,引入了虚析构函数,虚析构函数就是用virtual修饰析构函数。

析构函数:~ClassName();

虚析构函数:virtual ~ClassName();

2.virtual在函数中的使用限制

(1)不能用来修饰普通函数(全局函数)

普通函数不能是虚函数。

(2)不能用来修饰静态成员函数

静态成员函数不能是虚函数。

(3)不能用来修饰内联函数

内联函数不能是虚函数,编译器会忽略掉inline关键字,成为纯粹的虚函数。

(4)不能用来修饰构造函数

构造函数不能成为虚函数。

原文地址:https://www.cnblogs.com/xiaoqingyang/p/6077527.html