复制构造函数

时间:2012-01-06 17:38:54

标签: c++

  

可能重复:
  Why should the copy constructor accept its parameter by reference in C++?
  Why is copy constructor not allowed pass by value?

我正在阅读关于C ++课程的讲义。在注释中,他们说类的复制构造函数签名是

  

MyClass(MyClass& other)

  

MyClass(MyClass other)

不起作用。那是为什么?

谢谢!

5 个答案:

答案 0 :(得分:15)

因为MyClass(MyClass other)正在按值传递参数,而这本身需要创建一个副本。这将导致无限循环(仅在堆栈溢出时终止)。

答案 1 :(得分:3)

这是因为为了将MyClass other的实例传递给具有第二个签名的构造函数,构造函数需要调用它自己,导致无限的再生导致堆栈溢出。

尝试一下,这是一项非常有益的练习!

答案 2 :(得分:2)

MyClass(MyClass other)正在通过副本传递other,它将调用您正在定义的复制构造函数,因此您最终会得到无限递归。

答案 3 :(得分:1)

MyClass(MyClass other)已创建other的副本,因为您将参数other作为变量而不是参考,所以这种情况下的复制构造函数将毫无意义

答案 4 :(得分:1)

有效的复制构造函数签名是

MyClass(MyClass &other) MyClass(const MyClass &other) MyClass(MyClass const &other)

在C ++中,所有函数参数都按值传递。这意味着如果你按值传递other,它将在函数调用操作符完成后被销毁。 而且,在复制构造函数的情况下,将满足复制构造函数执行的无限循环。 因此,复制构造函数参数始终通过引用传递。