标签:style blog http ar color os 使用 sp on
师兄的项目上现在存在很多的料想不到的错误,在交流过程中,他说很多都是绕过去了,没有仔细的去纠察原因。于是我就在想内存泄露的问题影响到了项目出现了未知的错误,搜索关键词C++内存泄露,有很多前辈总结出来常见的容易出现内存泄露的地方,我在阅读的时候,结合自己的写代码习惯,还真了解不少我在代码编写过程中出现的问题,下面贴出搜索到的关键部分:
http://blog.csdn.net/wenhm/article/details/4314863
~CApple() { if(NULL != m_ptrData) { delete m_ptrData; m_ptrData = NULL; } } //需要提醒的是:上面删除m_ptrData再置NULL,是一个良好的编程习惯,可以避免产生野指针。
//(当然这里对象都析构了不存在这个问题,但其它很多地方将删除的指针置NULL是非常明智的一个做法,
//不然鬼知道这个指针指向的内存是否是有效的)
动态分配的对象数组,记得使用delete[]来进行删除。基于两个考虑:
(1)可以释放整个数组的空间;
(2)调用数组中每个对象的析构函数。不是采用常规内存分配(new、malloc、calloc、realloc)的内存也要记得释放,如strdup等。
有一些C/C++ Api返回的指针是动态分配的需要使用者来负责释放,这个只要使用时看清楚Api的说明就不会有什么问题了。
一个类的指针被向上引用,作为基类的指针来使用的时候,把析构函数写成虚函数。这样做是为了当用一个基类的指针类型来删除一个派生类的对象时,派生类的析构函数会被调用。(new子类的对象,删除时却采用delete父类类型的指针。new CConcreteClass的对象ptr,但delete CClass类型的指针ptr,无法调用正确的析构函数)
在QT中可以看到很多指针new后没有delete:
参看博文《从 Qt 的 delete 说开来 》解释了为什么在示例工程中看到了很多new,而没有看见对应多的delete的原因。
标签:style blog http ar color os 使用 sp on
原文地址:http://www.cnblogs.com/galuo/p/4058791.html