先看以下简单地代码:
#include<iostream>
using namespace std;
class A
{
public:
A(){}//构造函数
A(A p_a)//错误的拷贝构造函数
{
m1 = p_a.m1;
}
A(A&p_a)//正确的拷贝构造函数
{
m1 = p_a.m1;
}
private:
int m1;
};
int main(void)
{
A a1;
A a2(a1);//调用拷贝构造函数,来创建a2
}
若是传值的话 实参a1 传给形参 p_a 时,调用的还是拷贝构造函数;
那相当于拷贝构造函数在执行的时候调用了自己,产生了一个递归,死循环;
拷贝构造函数不能传值,传指针和引用就不会存在这个问题