在c ++中复制构造函数

时间:2011-03-15 12:58:08

标签: c++

  

可能重复:
  Why should the copy constructor accept its parameter by reference in C++?

为什么我们总是在复制构造函数中有引用?

如果有class

class Base{};

它的拷贝构造函数是:

Base::Base(const Base& B);

为什么总是作为参数的参考?

3 个答案:

答案 0 :(得分:13)

如果它不是引用,编译器需要调用复制构造函数才能将参数传递给复制构造函数。

这会产生stack overflow http://www.prodeveloper.org/wp-content/uploads/2008/10/stackoverflow-logo-250.png

答案 1 :(得分:0)

如果您尝试按值传递参数,则编译器必须复制参数,然后再次调用复制构造函数。这将导致无休止的递归和堆栈溢出。

答案 2 :(得分:0)

当需要制作对象的副本时,会调用copy-constructor。

现在想想,如果复制构造函数不接受对象的引用,那意味着你必须通过 value 传递它,而这又需要制作原始对象的副本。这意味着,它将再次调用copy-constructor来制作该对象的副本。通过这种方式,它将继续调用copy-constructor。