c++ 为什么拷贝构造函数必须为引用

如果拷贝构造函数不是引用的话,将会引发无限制的递归,最终导致栈溢出。

我们知道拷贝函数的缺省形式:

1
2
3
4
5
class A {
A(){};
A(const A &tmp) {};
~A(){};
}

如果拷贝构造函数不为引用,那么将引发无限制的递归最终导致栈溢出。

简单来说就是,如果不是引用,那么在调用的时候,会重新实例化一个对象,在进行赋值,但是实例化这个对象又将调用拷贝构造函数,那么就出现了递归,并且是只要调用就会无限制递归。