コンストラクション関数の呼び出しのコピー


 1 #include <iostream>

 2 using namespace std;

 3 

 4 class Test

 5 {

 6 public:

 7   Test(int n = 1)

 8   {

 9     val = n;

10     cout << "Con." << endl;

11   }

12 

13   Test(const Test& t)

14   {

15     val = t.val;

16     cout << "Copy con." << endl;

17   }

18 

19   Test& operator=(Test& t)

20   {

21     val = t.val;

22     cout << "Assignment." << endl;

23     return *this;

24   }

25 

26 private:

27   int val;

28 };

29 

30 void func1(Test t)

31 {

32 }

33 

34 Test func2()

35 {

36   Test t;

37   return t;

38 }

39 

40 void main()

41 {

42   Test t1(1);

43 

44   Test t2 = t1; //

45 

46   Test t3;

47   t3 = t1;

48 

49   func1(t2); //

50 

51   t3 = func2(); //

52 }

運転結果:Con.Copy con.[①オブジェクトt 2を作成して初期化する、複製コンストラクタを呼び出す]Con.Assignment.Copy con.[②実パラメトリックはパラメータを値伝達で初期化し、複製構造関数を呼び出す]Con.Copy con.[③コピーコンストラクタ履歴書の一時オブジェクトを呼び出し、関数の戻り値として]Assignment.