北京一搜索挖掘公司:析构函数为什么要用虚函数
作用:一句话,避免内存泄漏!
用处:在公有继承中,基类对派生类及其对象的操作,只能影响到那些从基类继承下来的成员.如果想要用基类对非继承成员进行操作,则要把基类的这个函数定义为虚函数.
先看一段虚析构函数代码:
01 | #include |
02 | using namespace std; |
03 | class Base |
04 | { |
05 | public : |
06 | virtual ~Base() |
07 | { |
08 | cout<< "~Base" <<endl; |
09 | } |
10 | }; |
11 |
12 | class Derived: public Base |
13 | { |
14 | public : |
15 | virtual ~Derived() |
16 | { |
17 | cout<< "~Derived" <<endl; |
18 | } |
19 | }; |
20 |
21 | int main() |
22 | { |
23 | Base *pb = new Derived; |
24 | delete pb; |
25 | return 0; |
26 | } |
输出结果是:
~Derived
~Base
如果不是析构函数不是虚函数,输出结果是:
~Base
深入了解如下:
如果不需要基类对派生类及对象进行操作,则不能定义虚函数,因为这样会增加内存开销.当类里面有定义虚函数的时候,编译器会给类添加一个虚函数表,里面来存放虚函数指针,这样就会增加类的存储空间.所以,只有当一个类被用来作为基类的时候,才把析构函数写成虚函数.
http://www.cplusplus.me/1108.html