首页 > 编程语言 > 详细

今天我内存泄漏了......C++ 中的虚析构函数以及内存泄漏的调试方法

时间:2017-03-20 15:18:31      阅读:219      评论:0      收藏:0      [点我收藏+]

我终于内存泄漏一次了,我觉得这是一个开始。

这个项目的内存泄漏有两处:

  1.窗体销毁时,忘记delete apiCtrl类的指针

  2.IScanBase基类忘记用虚析构函数,偷懒3秒,3小时调试到死。

  为什么要用虚析构函数:

    1.虚函数:多态时,编译器查找虚函数表,找到最高子类该函数调用。

    2.析构函数:析构子类  后 析构父类

    3.多态时:  base b = new child();  d->f(虚函数);   delete b;  

        此时问题出现了,我们new 的时候准确知道调用child构造,调用f()也知道f为虚函数,

        但是delete呢,如果基类的析构非需,则只能调用基类析构,将会导致子类析构没做,造成内存泄漏。

        所以我们有这样的准则:

          基类中有虚函数,那就必须为基类声明虚析构函数。 (你玩多态,必然有基类指针指向new 的子类,子类想正确被释放,则基类必须虚析构函数)

          一个类若不做基类,或者不具备多态性质,则没有必要声明虚析构函数。

今天我内存泄漏了......C++ 中的虚析构函数以及内存泄漏的调试方法

原文:http://www.cnblogs.com/jushuai/p/6589153.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!