拷贝构造函数自己的参数必须是引用类型?
答案是肯定的,如若不是本参数的引用类型,则会造成死循环,无限递归。因为函数调用过程为:复制构造函数,其实也是一个函数,如果你给它定义的参数,是一个类型,而不是一个类型的引用,它会首先调用该参数的类型的复制构造函数,重新构造一个新的实例,而参数类型的构造函数就是我们刚刚定义的复制构造函数,这样便造成了递归。
例子:
/拷贝构造
CExample(const CExample& C)
{
a = C.a;
}
CExample A(100);
CExample B = A;
拷贝的过程:
(1)A对象传入形参时,会先会产生一个临时变量,就叫 C 吧。
(2).然后调用拷贝构造函数把A的值给C。 整个这两个步骤有点像:CExample C(A);
(3).等拷贝函数执行完后, 析构掉 C 对象。
如参数类型不是引用类型,拷贝构造函数传递参数时又会调用拷贝构造函数,造成循环调用。