RT,这是我写的赋值运算符: 是的。每个元素的值都相同。如图 谢谢指点,不过这里还有两个问题想请教一下。首先是,对于自己写的类来说,并没有"=="这个运算符,自定义略麻烦,而且执行这个检查效率也不高。其次的话,我当初以为自己已经考虑了自赋值问题。 double *curr=new double[rhs,row*rhs.col]; 是的。但下面还有while,while那个循环才是拷贝元素的。拷贝元素完了以后把赋值对象原本指向的数组释放掉,重新建一个,就是data=new double[row*col],再把临时数组curr的首地址赋给data,在程序块结束的时候,curr会被释放,但它指向的数组并没有被释放,而data依然指向它,说实在的,我不是很想得出来这个做法错误在什么地方。 curr=rhs.data;//这就是错误所在,curr经过此语句后再也不会指向你分配的内存
Matrix& operator =(const Matrix& rhs)
row=rhs.row;
col=rhs.col;
double *curr=new double[rhs,row*rhs.col];
curr=rhs.data;
int count=0;
while (count!=rhs.row*rhs.col)
*(curr+count)=*(rhs.data+count);
++count;
;
delete [] data;
data= new double [row*col];
data=curr;
return *this;
;
现在的问题是
Matrix mat2=mat;
赋值是正常的,但是
mat2=mat2,则会输出随机数。
我先输入了mat=[1 2;3 4],之后第一个矩阵是mat,Operator下的第一个矩阵是拷贝过来的,
Matrix mat2=mat;
随机数的矩阵是mat2自赋值的结果
mat2=mat2
谢谢大神们帮忙。
指针操作的问题吧:
while (count!=rhs.row*rhs.col)
*(curr+count)=*(rhs.data+count);
++count;
;
再这个循环里每次运算mat的值都发生变化,下一次就会继续使用变化后的值进行计算。个人感觉mat2=mat2后应该不是随机数,你多次运行一下试试,应该每次mat2=mat2后得到的都是一样的结果。。。追问
if(this== &rhs) return *this;追问
在赋值运算符里面,我是先把右侧值携带的数组拷贝给临时的数组curr,再释放data,再把data绑定到临时数组上,按理来说不应该出现自赋值错误啊?
curr=rhs.data;//这里不会做内容拷贝,只是把指针赋值过去而已