1. 程式人生 > >day 03

day 03

編譯器 變量 如果 void AC col 發生 out 臨時對象

1,構造函數只能調用一次

析構函數調用順序和,構造函數調用順序相反,誰先被構造,最後被析構

函數中定義的局部類 會在函數執行完畢後,析構

 1 void func(Test t) //Test t = test1::t1; //會調用局部變量t的拷貝構造函數
 2 {
 3     cout << "func begin..." << endl;
 4     t.printT();
 5     cout << "func end..." << endl;
 6 
 7 }
 8 25 //場景四
26 Test func2()
27 {
28 cout << "func2 begin..." << endl; 29 Test temp(10, 20); //調用temp的帶參數構造函數 30 cout << "func2 end.." << endl; 31 return temp; // 有一個臨時的匿名對象 = temp ,把temp的數據給到了臨時的匿名對象, ,會調用這個臨時匿名 32 //對象的拷貝構造函數, 將temp穿進去。 33 } 34 35 void test4() 36 { 37 cout << "
test4 begin " << endl; 38 func2(); 39 40 //匿名對象在此被析構了, 如果一個臨時的匿名對象,沒有任何變量去接收它,編譯器認為這個臨時匿名對象沒有用處。 41 //編譯器會立刻銷毀這個臨時的匿名對象 42 cout << "test4 end" << endl; 43 } 44 45 void test5() 46 { 47 cout << "test5 begin ..." << endl; 48 Test t1 = func2();//如果有一個變量去接收這個臨時的匿名對象, 編譯器認為這個匿名對象轉正了,就不會立刻給他銷毀。
49 //t1 = 匿名的臨時對象 為什麽不會發生拷貝構造 50 // 此時的t1 去接收這個匿名的臨時對象不是 重新創建一個t1 而是給這個匿名對象起個名字就叫t1 51 //一旦這個匿名對象有了自己的名字,編譯器就不會立刻給這個匿名對象銷毀了, 52 //就當普通局部變量處理了
53 54 cout << "test5 end..." << endl; 55 56 //在此時析構的t1 57 }
1 void test6()
2 {
3     cout << "test6 begin..." << endl;
4     Test t1; //調用t1的無參數構造函數
5     t1 = func2(); //調用的=號操作符 ,,t1 = 匿名對象。 調用了t1的=號操作符。
6                         //此時匿名沒有被轉正,匿名沒有自己的名字, 匿名對象這個內存沒有自己的別名, 編譯器就會立刻銷毀。
7     cout << "test6 end..." << endl;
8 }

day 03