1、C++关于拷贝构造函数和赋值运算符重载问题的测试程序。因为调用顺序不清,导致内存泄漏new delete
2013-04-27 19:34
423 查看
#include <iostream> #include <cstring> using namespace std; class ClsComplex { private: int m_nReal; int m_nImag; char *m_p_chStr; public : ClsComplex(int real=0,int imag=0,char *str=" "); //复制构造函数重载(常中引不会修改其值) ClsComplex(const ClsComplex &); //赋值运算符的重载 ClsComplex operator =(const ClsComplex & c);//如果返回类不是引用,则会自动调用拷贝构造函数 ~ClsComplex() { delete m_p_chStr; } }; ClsComplex::ClsComplex(int real,int imag,char *str):m_nReal(real),m_nImag(imag) { m_p_chStr=new char[strlen(str)+1]; strcpy(m_p_chStr,str); } //拷贝构造函数 ClsComplex::ClsComplex(const ClsComplex & com) { //因为构造函数是初始化对象第一个进来的,所以 cout<<"Copy Constructor is Called! "<<endl; m_nReal=com.m_nReal; m_nImag=com.m_nImag; //重新分配,(删除本对象的地址) m_p_chStr=new char[strlen(com.m_p_chStr)+1]; strcpy(m_p_chStr,com.m_p_chStr); } ClsComplex ClsComplex::operator=(const ClsComplex & com) { cout<<"Overload operator = is Called! "<<endl; //因为这个函数只有在不是初始化那个时刻才调用的 如:complex a,b(1,2,"3"); a=b;//调用这个函数 complex b(1,2,"3"); complex a=b;调用拷贝构造函数 其它返回类对象时均调用 拷贝构造函数,所以一般这两者同时存在 if(this==&com) return *this; m_nReal=com.m_nReal; m_nImag=com.m_nImag; delete m_p_chStr;//重新分配,删除本对象的地址 m_p_chStr=new char[strlen(com.m_p_chStr)+1]; strcpy(m_p_chStr,com.m_p_chStr); return *this; } int main() { //delete 删除时必须之前用过new或者会发生内存泄漏,报错 ClsComplex com1(1,2,"测试"); ClsComplex com2; //ClsComplex com2=com1;//直接调用拷贝构造函数,不调用普通构造函数 com2=com1;//没有operator =重载赋值运算符函数,则调用拷贝构造函数 //测试new delete是否出错 // char *a="测试"; // char *p=new char[strlen(a)+1]; // strcpy(p,a); // delete p; return 0; }
程序运行结果:
Overload operator = is Called!
Copy Constructor is Called!
Process returned 0 (0x0) execution time : 0.886 s
Press any key to continue.
相关文章推荐
- 拷贝构造函数和赋值运算符的重载的调用次数问题
- C++构造函数、拷贝构造函数、赋值运算符重载 调用时机 GCC与VC在对象作为返回值的不同处理
- 关于c++调用rar程序压缩与解压的问题
- 关于COM服务之加载顺序,此时你可能出现程序卡死,假死等现象,因为com服务可能加载了一半,导致其他需要com的服务假死
- 关于C++组合理解以及拷贝构造函数的调用时间的理解
- 关于C#中调用C++编写的DLL(非托管的DLL)的实现和问题记录
- 关于c++ cout输出顺序问题。
- 关于hadoop2.x(2.7.1 2.7.2)集群配置和测试运行中Ubuntu虚拟机VM设置nat方式导致节点传输问题
- 【C++】基类与子类拷贝构造函数的调用顺序
- 关于三星手机调用系统相机之后activity被销毁导致数据丢失问题
- 关于三星手机调用系统相机拍照旋转屏导致图片数据丢失问题
- 最近在探讨关于缓冲区溢出的相关问题,各位大侠帮忙看看这个程序,两个for循环导致内存内容不一样,其中的玄妙在哪里?我是嫩草,谢啦谢啦~~
- 在程序中调用C++链接库中的回调函由于没有考虑生命周期,直接写委托回随机的被gc给回收掉导致报这个错误
- 关于c#调用c++的dll遇到的问题
- PB程序调用C++ COM生成对象发回-2问题
- CSDN上下载的一些关于Android程序调用Webservice执行不成功的问题
- MFC程序下,关于静态lib库的调用上的连接问题
- c静态库被c++程序调用时应该注意的问题
- 关于C++模板和重载的小问题
- 关于 c#调用c++ 出现异常System.StackOverflowException 的问题