可能重复:
Why should the copy constructor accept its parameter by reference in C++?
为什么我们总是在复制构造函数中有引用?
如果有class
:
class Base{};
它的拷贝构造函数是:
Base::Base(const Base& B);
为什么总是作为参数的参考?
答案 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。