为什么我用&tmp却通过了?区别是什么?

如题
Matrix::Matrix(Matrix tmp)
{

y=tmp.y;x=tmp.x;

M=new int *[y];
for(int yy=0;yy<y;yy++)
M[yy]=new int[x];

for(yy=0;yy<y;yy++)
for(int xx=0;xx<x;xx++)
M[yy][xx]=tmp.M[yy][xx];
}
我用tmp时不通过
Matrix::Matrix(Matrix &tmp)
{

y=tmp.y;x=tmp.x;

M=new int *[y];
for(int yy=0;yy<y;yy++)
M[yy]=new int[x];

for(yy=0;yy<y;yy++)
for(int xx=0;xx<x;xx++)
M[yy][xx]=tmp.M[yy][xx];
}

陪伴而非守候
浏览 193回答 1
1回答

HUWWW

首先,这是一个拷贝构造函数。拷贝构造函数的作用就是通过另外一个本类类型的对象来创建一个对象,如果不带&那么调用拷贝构造函数时,而拷贝构造函数本身是值传递,形实结合的时候,又要调用拷贝构造函数,这样就是一个死循环。所以拷贝构造函数的参数一定是引用,不能是对象。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
CSS3