拷贝构造函数必须使用引用类型传递。const class& a 或者 class& a都行。
问1:为什么不能使用普通变量或者指针变量。
答:普通变量会引起无限递归调用拷贝构造函数本身。而使用指针变量可以实现拷贝构造函数,但是调用起来与我们的习惯不符,容易出错。
具体解释:
(前提)普通变量和指针变量传递中会被自动复制一份给实参。
当使用普通变量时,参数传递过程中两端都是class A,那么系统就会调用拷贝构造函数,这样又发生了实参->形参的过程,然后又会调用拷贝构造,如此反复,无限递归。见下图代码:
当时用指针变量时,那么默认规定了,要想调用此拷贝构造函数,必须使用对象指针。如下面的代码。a是一个指针,那么A b1 = a;此时调用了指针拷贝构造。但是 A b2 = a1; 它调用的是默认拷贝构造。一般的我们更习惯使用前者。