【C++】内存泄漏问题
2012-04-24 20:40
375 查看
C++里面有关内存泄漏的问题应该挺多的,接着上一篇文章后面,介绍一种内存泄漏,以后遇见了别的,继续往后添加
首先看下面一段程序
运行结果是:Base
destructor
上面这段程序为什么会造成内存泄漏呢?原因出在Base *b=new Derived();由于Base类里面并没有虚函数,所以指针b不能指向Derived类的成员,但是new Derived()已经生成了一个Derived类对象,在下面执行fun(b)的时候,b指向的是Base类对象,并不会析构生成的Derived对象。所以这边便会造成内存泄漏。解决方法就是讲Base类里面的析构函数改为虚析构函数,因为析构函数设置为虚函数之后,Base类的指针可以动态绑定了,实现运行时多态,保证使用基类类型的指针能够调用适当的析构函数针对不同的对象进行清理工作。
首先看下面一段程序
class Base{ public: ~Base(); }; Base::~Base(){ cout<<"Base destructor"<<endl; } class Derived:public Base{ public: Derived(); ~Derived(); private: int *p; }; Derived::Derived(){ p=new int(0); } Derived::~Derived(){ cout<<"Derived destructor"<<endl; delete p; } void fun(Base *b){ delete b; } int main(){ Base *b=new Derived(); fun(b); }
运行结果是:Base
destructor
上面这段程序为什么会造成内存泄漏呢?原因出在Base *b=new Derived();由于Base类里面并没有虚函数,所以指针b不能指向Derived类的成员,但是new Derived()已经生成了一个Derived类对象,在下面执行fun(b)的时候,b指向的是Base类对象,并不会析构生成的Derived对象。所以这边便会造成内存泄漏。解决方法就是讲Base类里面的析构函数改为虚析构函数,因为析构函数设置为虚函数之后,Base类的指针可以动态绑定了,实现运行时多态,保证使用基类类型的指针能够调用适当的析构函数针对不同的对象进行清理工作。
相关文章推荐
- C++智能指针解决内存泄漏问题
- C++内存泄漏——C++中动态内存分配引发问题的解决方案(1)
- c++对内存的浅谈以及内存泄漏问题的探讨之三
- c++对内存的浅谈以及内存泄漏问题的探讨之四
- c++对内存的浅谈以及内存泄漏问题的探讨之十
- c++对内存的浅谈以及内存泄漏问题的探讨之十一(1)
- c++对内存的浅谈以及内存泄漏问题的探讨之五(1)
- 详谈C++的内存泄漏问题
- c++内存泄漏和内存碎片的问题
- c++对内存的浅谈以及内存泄漏问题的探讨之一
- c++对内存的浅谈以及内存泄漏问题的探讨之五(2)
- 在VS2013平台下如何快速解决c++代码内存泄漏问题
- C++内存泄漏问题
- C++内存泄漏问题务必要避免!
- C++内存泄漏——C++中动态内存分配引发问题的解决方案(2)
- c++对内存的浅谈以及内存泄漏问题的探讨之十一(2)
- c++对内存的浅谈以及内存泄漏问题的探讨之六
- c++对内存的浅谈以及内存泄漏问题的探讨之七
- C++内存泄漏的问题?
- c++对内存的浅谈以及内存泄漏问题的探讨之八