1. 程式人生 > >建構函式與解構函式的呼叫時間

建構函式與解構函式的呼叫時間

    建構函式與解構函式是被編譯器隱式呼叫的。這些函式的呼叫時間取決於程式執行進入和離開例項化物件的作用域的順序。通常,解構函式的呼叫順序和對應建構函式的呼叫順序相反。但是,物件的儲存類別可以改變解構函式的呼叫順序。

    在全域性作用域內定義的建構函式在該檔案中任何其他函式(包括main函式)開始執行之前執行(儘管檔案間的建構函式的執行順序是不確定的)。在main函式終止時,呼叫相應的解構函式。exit函式強制程式立即終止並且不執行自動物件的解構函式。該函式常用於在檢測到輸入錯誤或打不開要處理的檔案時終止程式。abort函式類似於exit函式,但它強制程式立即終止,不允許呼叫任何物件的解構函式。abort通常用於指示程式的異常中斷。

    自動區域性物件的建構函式在執行到達對應的程式點時呼叫,對應的解構函式在物件離開該物件所在的作用域時(即定義該物件的執行結束時)呼叫。自動區域性物件的建構函式和解構函式在每次到達和離開該物件的作用域時呼叫。如果程式使用exit和abort函式終止,則不呼叫自動物件的解構函式。

    static區域性物件的建構函式只在執行第一次到達定義物件的程式點時呼叫一次。對應的解構函式在main函式終止或呼叫exit函式時呼叫。全域性和static物件的釋放順序和建立順序相反。如果遇到呼叫abort函式終止程式,則不呼叫static物件的解構函式。