码迷,mamicode.com
首页 > 编程语言 > 详细

C++类的继承过程中的内存泄漏问题

时间:2015-09-11 14:27:17      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

在笔试题中,经常会考到“内存泄露”的问题,其中一个就是:

  当用基类的指针指向new出来的派生类对象,然后再delete改指针时,会造成内存泄露。

原因大家都很清楚,用基类的指针指向了派生类的对象,派生类对象的结构并未发生变化,当我们delete该基类指针时,只有指向基类的数据成员的内存被释放,而派生类新增的成员占用的内存则仍然存在,这就造成了内存泄露。

  解决办法:将基类的析构函数声明为虚函数,即虚析构函数(virtual)。

【程序实例1】

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class Base{
 5 public:
 6     ~Base(){
 7         cout<<"Base deconstructor"<<endl;
 8     }
 9 };
10 
11 class Derived:public Base{
12 public:
13     ~Derived() {
14         cout<<"Derived desconstuctor"<<endl;
15     }
16 };
17 
18 int main()
19 {
20     Base *p=new Derived;
21 
22     delete p;
23 
24 }

【运行结果】

技术分享

 

=================================================================

然而,当我们用派生类的指针去指向派生类,然后再delete该指针,会出现内存泄露吗?(问了几个身边的小伙伴,结果没几个敢确定的),于是程序说话:

#include <iostream>
using namespace std;

class Base{
public:
    ~Base(){
        cout<<"Base deconstructor"<<endl;
    }
};

class Derived:public Base{
public:
    ~Derived() {
        cout<<"Derived desconstuctor"<<endl;
    }
};

int main()
{
    Derived *p=new Derived;

    delete p;

}

【运行结果】

技术分享

可见,这是没有问题的,用相同类型的指针指向相同类型的对象,怎么会造成问题呢?

 

C++类的继承过程中的内存泄漏问题

标签:

原文地址:http://www.cnblogs.com/acode/p/4800637.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!