标签:基类
本节重点大家只要明白为什么要声明析构函数为virtual函数,即声明virtual析构函数的意义。
我们知道,析构函数的作用就是实现多态polymorphic。那么如果我们动态创建一个derived派生类,由基类指针接受该派生类地址。那么我们如何释放这个派生类的内存?
如下代码:
class A
{
//...........
};
class B:public A
{
//.................
};
A* a=new B;
delete a;
大家认为以上释放有没有问题?
其实可能有问题也可能没问题,当基类的析构函数是virtual类型的就没问题,当基类的析构函数不是virtual则有问题。
试想一下,当基类的析构函数不是virtual,那么delete a调用的函数是基类的析构函数,它不会释放派生类的部分,造成内存的泄露。
当基类的析构函数是virtual,那么delete a调用的函数是派生类的析构函数。没问题。
标签:基类
原文地址:http://blog.csdn.net/u011058765/article/details/46591449