有很多朋友也许和我一样,在创建基类的时候不习惯声明其析构函数为虚函数!
举个例子:
- class ball
-
{
-
ball();
-
~ball();
-
};
-
class football:public ball
-
{
-
football();
-
~football();
-
}
这段代码看似很正常,但事实上却有很致命的内存泄漏的危险
有两种获取对象的方法:
1种.
- football *p = new football();
2种.
- ball *p = new football();
第一种情况下,在分配玩指针p后,对其进行delete p操作,不会有任何问题.但是,第二种情况下,进行delete p操作就会出现内促泄漏问题。
归其原因就在于,C++明白指出,如果一个derived class对象由一个base class指针所删除,并且这个基类带着non
-virtual析构函数,其结果是未有定义的,从实际情况下看就是,在derived class中声明的成员变量,不会跟随这个对象的删除而销毁,这样,内存泄漏就形成了.
所以正确的实现做法总结如下就是:
如果一个类要作为基类的话,将其析构函数声明为virtual
- 1. class ball
-
2. {
-
3. ball();
-
4. virtual ~ball();
-
5. };
-
6. class football:public ball
-
7. {
-
8. football();
-
9. ~football();
-
10. }
这样,以上第二种情况下,delete p就能够完全的销毁football类中声明的成员变量,从而避免内存泄漏。
阅读(3247) | 评论(0) | 转发(0) |