2013-02-27 76 views
0

這裏是我的示例代碼調用析構函數的參考?

class king 
{ 
public: 
    king(int q) 
     :queen(q) 
    { 
    } 

    ~king() 
    { 
     cout << "king's destructor." << endl; 
    } 

    void operator= (const king &k) 
    { 
     cout << "king's copy constructor." << endl; 
     queen = k.queen; 
    } 

private: 
    int queen; 
}; 

void refFunc0(king &k) 
{ 
    king &kk = k; 
} 

void refFunc1(king &k) 
{ 
    king kk = k; 
} 

void main() 
{ 
    int qqq0 = 55; 

    king kkk0(qqq0); 
    refFunc0(kkk0); 

    cout << qqq0 << endl; 

    int qqq1 = 66; 
    king kkk1(qqq1); 
    refFunc1(kkk1); 

    cout << qqq1 << endl; 

    cin.get(); 
} 

誰能幫助解釋上面的代碼中發生了什麼? 我的意思是如果我將一個引用傳遞給一個函數,那麼引用變量調用析構函數將銷燬傳入該函數的原始變量作爲引用?

+2

這不是一個複製構造函數,這是一個複製賦值操作符。 – 2013-02-27 19:50:19

回答

1

此功能:

void refFunc1(king &k) 
{ 
    king kk = k; 
} 

創造king的副本。在複製的對象上調用析構函數。然後,再次在main()中的king對象上再調用兩次。

+0

謝謝,我明白了。 – Nowibananatzki 2013-02-27 20:43:24

6

參考文獻不是對象,它們只是參考到一個對象。綁定對象的引用不會影響對象的生命週期(除非可能擴展它,如果引用是const且對象是臨時的,但它肯定不會縮短生命週期)

+0

謝謝,我明白了。 – Nowibananatzki 2013-02-27 20:47:27

1

refFunc0完全沒有任何作用。引用只是對象的另一個名稱。 refFunc1將在kk中創建一個king的副本,然後在該函數結束時破壞kk。 當'main'結束時,kkk0和kkk1將被銷燬。

+0

謝謝,我明白了。 – Nowibananatzki 2013-02-27 20:41:59