2015-04-21 76 views
1

我有我的五個主要用戶定義的對象如下:順序用C析構函數調用++的

有沒有在析構函數被調用任何特定的順序?就像說定義的順序如下:

Student s1; 
Student s2; 
Student s3; 
Student s4; 
Student s5; 

s5的析構函數是先調用還是s1的?

+1

我相信你的代碼不應該依賴破壞(至少可讀性原因) –

+1

@TonyD的順序,請參閱本http://stackoverflow.com/questions/10595283/order-and-point-of然後調用析構函數。 – jsantander

回答

5

的析構函數將在順序s5s4s3s2s1被調用。這是一個通用規則:如果兩個對象的生命週期重疊,那麼第一個被構建的將是最後被自動銷燬的。這當然不適用於動態存儲持續時間的對象,這些對象不會自動銷燬。 (例如,當調用deletenew創建對象被銷燬。)

+0

布萊恩,我愛你的男人。謝謝。 –

+0

你知道,有趣的是,當有人和Brian一樣多的回答一個問題時,你就知道這是正確的答案,並且認爲這是理所當然的。真棒! :) –

+0

@TimSouthee謝謝,但我也犯了很多錯誤:) – Brian

1

是的,破壞的順序總是相反結構的順序。

請看下面的代碼。

class Base 
    { 
    public: 

    Base () 
    { 
    cout << "Inside Base constructor" << endl; 
    } 


    ~Base () 
    { 
    cout << "Inside Base destructor" << endl; 
    } 

}; 

class Derived : public Base 
{ 

public: 

Derived () 
{ 
    cout << "Inside Derived constructor" << endl; 
} 

~Derived () 
{ 
    cout << "Inside Derived destructor" << endl; 
} 

}; 

    void main() 
    { 
    Derived x; 
    } 

如果您運行此代碼,您將獲得以下輸出。

Inside Base constructor 
    Inside Derived constructor 
    Inside Derived destructor 
    Inside Base destructor