注:文章所有内容均是从剑指Offer摘录
class A
{
private:
int value;
public:
A(int n) { value = n; }
A(A other) { value = other.value; }
void Print() { std:cout << value << std::endl; }
};
int _tmain(int argc, _TCHAR* argv[])
{
A a = 10;
A b = a;
b.Print();
return 0
}
上述代码中,复制构造函数A(A other)传入的参数是A的一个实例。由于是传值参数,把形参复制到实参会调用复制构造函数。因此允许复制构造函数传值,就会在复制构造函数内调用复制构造函数,就会形成永无休止的递归调用从而导致栈溢出。因此C++标准不晕需复制构造函数传值参数,在VS和GCC中都将编译错误。要解决这个问题,可以把构造函数修改为A(const A& other),也就是把传值参数改成常量引用