臨時對象

臨時對象函數

    直接調用構造函數會產生一個臨時對象。優化

    臨時對象生命週期只在一條語句運行的時間中,做用域也只在一條語句中。spa

 

#include <stdio.h>

class Test 
{
int mi; public: Test(int i)
  { mi
= i; } Test()
  { Test(
0); //直接調用構造函數時,此處只建立了一個臨時對象並未將0賦值給mi,臨時對象做用域和生存時間都是這條語句。 } void print()
  { printf(
"mi = %d\n", mi); } }; int main() { Test t; //在這條語句後立刻構造一個對相併立刻析構。 t.print(); // 因此此處爲隨機值。
   Test().print(); // 此處建立了一個臨時對象並調用了其的print函數,後立刻析構。
   Test t = Test(100); //此處不會產生臨時對象,在函數返回時析構。
return 0; }

 

#include <stdio.h>

class Test { int mi; public: Test(int i)                  //構造函數  { printf("Test(int i) : %d\n", i); mi = i; } Test(const Test& t)         //拷貝構造函數  { printf("Test(const Test& t) : %d\n", t.mi); mi = t.mi; } Test()     //構造函數  { printf("Test()\n"); mi = 0; } int print() { printf("mi = %d\n", mi); } ~Test()                    // 析構函數  { printf("~Test()\n"); } }; Test func() { return Test(20); } int main() { Test t = Test(10); // 並無調用構造函數建立臨時對象並調用拷貝構造函數賦值給 t 。C++優化代碼,結構是直接調用構造函數。代碼優化爲 Test t = 10;
    Test tt = func();  // C++優化代碼,結果是直接調用構造函數。代碼優化爲 Test tt = Test(20); 再優化爲 Test tt = 20;
 t.print(); tt.print(); return 0; }
相關文章
相關標籤/搜索