这是一个简单的复制构造函数的应用:
#include <bits/stdc++.h>
using namespace std;class A {
public:A() {cout << "创建对象(默认构造函数)\n";}A(A & a) { // 最好是:const A & acout << "创建对象(复制构造函数)\n";}
};int main() {A a1;A a2(a1);return 0;
}
很多小伙伴刚学的时候都会疑问为什么复制构造函数的形参只能是引用形式如:A & a
,而不能是按值传递如:A a
?
原因:
如果使用按值传递,以上边代码为例,在 a2
调用复制构造函数,复制一份 a1
作为形参的时候,又需要调用一次复制构造函数。我们能够发现,这个过程陷入了死循环:我们希望复制一个对象,但又在复制构造函数中先复制一份给形参。这个过程显然是不能结束的,所以不能使用按值传递。