Effective C++条款7

为多态基类声明virtual析构函数

本节重点大家只要明白为什么要声明析构函数为virtual函数,即声明virtual析构函数的意义。

我们知道,析构函数的作用就是实现多态polymorphic。那么如果我们动态创建一个derived派生类,由基类指针接受该派生类地址。那么我们如何释放这个派生类的内存?
如下代码:

class A {
//...........
};

class B:public A {
//.................
};

A* a=new B;
delete a;

大家认为以上释放有没有问题?
其实可能有问题也可能没问题,当基类的析构函数是virtual类型的就没问题,当基类的析构函数不是virtual则有问题。

试想一下,当基类的析构函数不是virtual,那么delete a调用的函数是基类的析构函数,它不会释放派生类的部分,造成内存的泄露。

当基类的析构函数是virtual,那么delete a调用的函数是派生类的析构函数。没问题。

你可能感兴趣的:(基类)