operator= 要注意避免内存泄露(项目经验)

原创 2015年07月08日 17:14:40
指针不论是指向malloc还是new分配得到的内存,一定要注意在改变指针指向之前一定要先释放旧的内存块。

class Test
{
public:
                 Test()
                {
                                 if (p != NULL)
                                {
                                                 free(p );
                                                 p = NULL ;
                                }
                                 p = (char *)malloc( sizeof(char ));
                }
                 Test(const Test & C1)
                {
                                 cout << "ooo我在进行拷贝构造" << endl;
                                 p = (char *)malloc( sizeof(char ));
                                * p = *C1 .p;
                }
                ~ Test()
                {
                                 cout << "ooo我在析构" << endl;
                                 if (p !=NULL)
                                {
                                                 free(p );
                                                 p = NULL ;
                                }
                }
                 void operator=(Test &C2)
                {
                                 if (p !=NULL)
                                {
                                                 free(p );
                                                 p = NULL ;
                                } 
                //这里很重要,A=B时,A本身已经malloc了一块内存,如果此时没有              
                  free,直接执行下面一句让p指向另一块内存,那么之前malloc出来的     
                  内存如何释放?
                                 p = (char *)malloc( sizeof(char ));
                                           *p = *C2.p;
                }
private:
                 char *p ;
};
void main ()
{
                 Test A ;
                 Test B ;
                 A = B ; //这里要注意,直接“=”的情况下不会调用拷贝构造函数,要用=重载来避免浅拷贝
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

sigsetjmp siglongjmp使用时要注意内存泄露

如果你在sigsetjmp条件内构造了一个对象,那么很容易造成内存泄露,程序的 突然跳转,导致析构函数还没有执行.以下是测试代码...
  • lcriver
  • lcriver
  • 2014年10月22日 09:32
  • 203

项目经验之谈 —— 利用编译器及C语言特性<位域>进行内存边界检测

1.前言2.校验3.源码#include #include #include #include #include #include #include #include #include...

Android开发规范和项目经验建议

  • 2016年05月03日 19:10
  • 32KB
  • 下载

java面试_项目经验描述

  • 2014年03月21日 20:20
  • 62KB
  • 下载

C#内存泄露与资源释放 经验总结

经验总结:C#并不是有了垃圾回收机制,你就可以对内存管理放任不管,其实在稍不注意的时候,可能就造成了内存泄露,或者超大内存占用~ 以下记录下遇到过的内存优化-内存泄露的问题与应对方案。 1...
  • Yokeqi
  • Yokeqi
  • 2014年11月13日 18:39
  • 9086

DataStage_项目经验分享.doc

  • 2010年07月11日 23:20
  • 83KB
  • 下载

Android应用内存泄露分析、改善经验总结

原则   对于性能问题,分析和改善有必要遵循以下原则: 一切看数据说话,不能跟着感觉走,感觉哪有问题就去改,很有可能会适得其反; 性能优化是一个持续的过程,需要不断地改善,不要想着一气呵成; ...

C++经验之检测内存泄露

C++具有动态分配和释放内存的能力,所谓成也萧何败萧何,这种能力如果使用疏忽会造成内存泄露。本文简单介绍2种检测内存泄露的方法。【使用调试器和CRT库】在程序的开头包含如下说明。在VS2010平台上,...
  • lilypp
  • lilypp
  • 2011年07月12日 17:37
  • 788

Android应用内存泄露分析、改善经验总结

前言   通过这几天对好几个应用的内存泄露检测和改善,效果明显: 完全退出应用时,手动触发GC,从原来占有内存100多M降到低于20M; 手动触发GC后,通过adb shell du...
  • json_it
  • json_it
  • 2017年08月08日 14:42
  • 102

项目经验交流

  • 2013年11月04日 22:05
  • 49KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:operator= 要注意避免内存泄露(项目经验)
举报原因:
原因补充:

(最多只允许输入30个字)