我有我的五個主要用戶定義的對象如下:順序用C析構函數調用++的
有沒有在析構函數被調用任何特定的順序?就像說定義的順序如下:
Student s1;
Student s2;
Student s3;
Student s4;
Student s5;
s5的析構函數是先調用還是s1的?
我有我的五個主要用戶定義的對象如下:順序用C析構函數調用++的
有沒有在析構函數被調用任何特定的順序?就像說定義的順序如下:
Student s1;
Student s2;
Student s3;
Student s4;
Student s5;
s5的析構函數是先調用還是s1的?
的析構函數將在順序s5
,s4
,s3
,s2
,s1
被調用。這是一個通用規則:如果兩個對象的生命週期重疊,那麼第一個被構建的將是最後被自動銷燬的。這當然不適用於動態存儲持續時間的對象,這些對象不會自動銷燬。 (例如,當調用delete
與new
創建對象被銷燬。)
布萊恩,我愛你的男人。謝謝。 –
你知道,有趣的是,當有人和Brian一樣多的回答一個問題時,你就知道這是正確的答案,並且認爲這是理所當然的。真棒! :) –
@TimSouthee謝謝,但我也犯了很多錯誤:) – Brian
是的,破壞的順序總是相反結構的順序。
請看下面的代碼。
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
我相信你的代碼不應該依賴破壞(至少可讀性原因) –
@TonyD的順序,請參閱本http://stackoverflow.com/questions/10595283/order-and-point-of然後調用析構函數。 – jsantander