一般而言,析構函數調用的順序和構造函數調用順序相反,但是,對象的存儲類別可以改變調用析構函數的順序。舉例說明:
CreateAndDestroy類的定義

CreateAndDestroy類的成員函數的定義

測試函數


構造函數和析構函數的調用順序:

分析
全局作用域內定義的對象的構造函數,在文件內任何其他函數(包括main函數)開始執行之前調用,當main函數執行結束時,相應的析構函數被調用,如上面的Object 1.
exit函數迫使程序立即結束,不執行自動對象的析構函數。當程序中檢測到輸入中有錯誤,或者程序要處理的文件不能打開時,常常使用exit函數來終止程序。abort函數的執行情況與exit
函數類似,但是迫使程序立刻終止,不允許調用任何對象的析構函數。通常使用abort函數指示程序的非正常終止。
當程序執行到自動局部對象的定義處時,該對象的構造函數被調用;當程序執行離開對象的作用域時,相應的析構函數被調用。如果程序的終止是由調用exit函數或者abort函數完成,
那么自動對象的析構函數將不被調用。
static 局部對象的構造函數只調用一次,即在程序第一次執行到該對象的定義處時;而相應的析構函數的調用則發生在main函數結束或者程序調用exit函數。全局或靜態對象的的撤銷
順序與它們建立的順序正好相反。abort函數的調用終止程序時,static對象的析構函數將不被調用。
在測試函數的第10行定義了全局static對象first, 在main中任何語句執行之前,調用它的構造函數;而在運行所有其他對象的析構函數之后程序終止,調用它的析構函數。
對象second和fourth都是局部自動對象,對象third是一個static局部對象。當程序執行到每個對象聲明處時,調用它們的構造函數;當程序執行到main函數結尾時,依次調用對象fourth和second的析構函數(與構造函數的調用順序相反)。因為對象third是static局部對象,所以直到程序終止時,他才撤銷,即對象third的析構函數在全局對象first的析構函數調用之前、在所有其它對象撤銷之后調用。
第25行的create函數聲明了3個對象:fifth和senventh是局部自動對象,sixth是局部static對象。程序執行到create函數結尾時,依次調用對象seventh和fifth的析構函數(與構造函數調用的順序相反)。由於sixth是static,因此直到程序終止時它才撤銷。sixth的析構函數的調用發生在third和first的析構函數之前及其它所有對象撤銷之后。
