析構函式呼叫順序

2021-07-22 06:28:34 字數 615 閱讀 7570

設已經有a,b,c,d4個類的定義,程式中a,b,c,d析構函式呼叫順序為?

c c;

voidmain()

這道題主要考察的知識點是 :全域性變數,靜態區域性變數,區域性變數空間的堆分配和棧分配

解題思路:

其中全域性變數和靜態區域性變數時從靜態儲存區中劃分的空間(未初始化為bss,已初始化為資料段)

二者的區別在於作用域的不同,全域性變數作用域大於靜態區域性變數(只用於宣告它的函式中),

而之所以是先釋放 d 在釋放 c的原因是, 程式中首先呼叫的是 c的建構函式,然後呼叫的是 d 的建構函式,析構函式的呼叫與建構函式的呼叫順序剛好相反

區域性變數a 是通過 new 從系統的堆空間中分配的,程式執行結束之後,系統是不會自動**分配給它的空間的,需要程式設計師手動呼叫 delete 來釋放。

區域性變數 b 物件的空間來自於系統的棧空間,在該方法執行結束就會由系統自動通過呼叫析構方法將其空間釋放。

之所以是 先 a  後 b 是因為,b 是在函式執行到 結尾 "}" 的時候才呼叫析構函式, 而語句 delete a ; 位於函式結尾 "}" 之前。

析構函式的呼叫順序

析構函式做最後的 清場工作 一般當派生類物件從記憶體中撤銷時,先呼叫派生類的析構函式,再呼叫基類析構函式 但,若用new建立了臨時物件,在用delete撤銷物件是,系統會只執行基類的析構函式,而不執行派生類的析構函式。如果將基類的析構函式宣告為虛函式,由基類所有派生類的析構函式自動成為虛函式 即使析...

析構函式的呼叫順序

如果是多個物件,呼叫建構函式的次序與呼叫析構函式的次序相反 對於不同作用域和儲存類別的物件,建構函式he析構函式的呼叫順序 全域性物件 不同作用域和儲存類別的物件建構函式和析構函式的呼叫順序 在寫這個 時遇到了乙個問題,幾個警告 我使用的編譯器是visual studio 2019 出現了乙個錯誤 ...

構造和析構函式呼叫順序

c 中建構函式與析構函式的呼叫順序 c 建構函式和析構函式的呼叫順序 基類建構函式 物件成員建構函式 派生類本身的建構函式 派生類本身的析構函式 物件成員析構函式 基類析構函式 與構造順序正好相反 區域性物件,在退出程式塊時析構 靜態物件,在定義所在檔案結束時析構 全域性物件,在程式結束時析構 繼承...