运算符重载中可能的深拷贝问题
来源:互联网 发布:java调用webservice 编辑:程序博客网 时间:2024/04/30 06:12
一般情况来说 在类中 系统会自动提供一个默认的拷贝构造函数来处理复制,但在某写状况下,类体内的成员是需要动态开辟堆内存的,如果我们不自定义拷贝构造函数而让系统自己处理,那么就会导致堆内存的所属权产生混乱,已经开辟的一端堆地址原来是属于对象a的,由于复制过程发生,b对象取得是a已经开辟的堆地址,一旦程序产生析构,释放堆的时候,计算机是不可能清楚这段地址是真正属于谁的,当连续发生两次析构的时候就出现了运行错误。
更详细的说明 在这个地址http://pcedu.pconline.com.cn/empolder/gj/c/0503/570112_1.html
如同我发的帖子http://topic.csdn.net/u/20100514/17/aa2ea6c2-0fb8-4fc4-b467-d08f979fa5d4.html
在
[code=C/C++]
CMatrix& CMatrix::operator=(const CMatrix &other)
{
if (&other == this)
{
return (*this) ;
}
m_NumColumns = other.m_NumColumns ;
m_NumRows = other.m_NumRows ;
m_pData = other.m_pData ;
return *this ;
}
[/code]
中 m_pData = other.m_pData ;
这样复制的话 肯定就是深拷贝了,一旦临时变量析构 后面的变量再析构的话 就是严重的错误。
这样改 就可以了
[code=C/C++]
CMatrix::CMatrix(const CMatrix &other)
{
m_NumColumns = other.m_NumColumns;
m_NumRows = other.m_NumRows;
m_pData = new double[m_NumColumns * m_NumRows];
memcpy(m_pData,other.m_pData,m_NumColumns * m_NumRows *sizeof(double));
}
[/code]
- 运算符重载中可能的深拷贝问题
- C++中深浅拷贝问题以及重载=运算符
- 拷贝构造和运算符重载(我解决的问题)
- 拷贝构造函数,类的赋值运算符重载,深拷贝与浅拷贝
- 实验二运算符的重载,体验深拷贝
- C++ 深拷贝与浅拷贝&重载赋值运算符
- C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝
- C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝
- C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝
- C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝
- C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝
- C++类的赋值运算符=的重载,以及深拷贝和浅拷贝
- C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝
- C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝
- 类的赋值运算符=的重载,以及深拷贝和浅拷贝
- C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝
- C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝
- 类的赋值运算符=的重载,以及深拷贝和浅拷贝 详解
- ar命令使用方法
- 加载spring配置文件的常用三种方法
- java的HashCode方法
- PKU1067算法及几种博弈
- Dropbox被墙了,幸亏还有类似服务SugarSync
- 运算符重载中可能的深拷贝问题
- 百度中国行—成都站峰会
- C#中实现DataGrid双向排序
- java与c++的区别
- 误装jvm
- vc++学习之关键字
- 爱上对方
- group by 的使用详解
- 郁闷中。。。。。