這是一個簡單的復制構造函數的應用:
#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
作為形參的時候,又需要調用一次復制構造函數。我們能夠發現,這個過程陷入了死循環:我們希望復制一個對象,但又在復制構造函數中先復制一份給形參。這個過程顯然是不能結束的,所以不能使用按值傳遞。