析構函式是「反向」的建構函式。它們在物件被撤消(**)時呼叫。析構函式的名 稱除了最前面的「~」符號外,與類的名稱相同。例如,類string的析構函式是~string()。 析構函式通常用於當乙個物件不再需要時,完成「消除」功能。
在函式中建立物件之後,這個物件作為區域性物件開始生存,直到函式執行到遇見右括號「}」才結束生存,此時呼叫析構函式。
物件的釋放發生在以下幾種情況,首發自學程式設計網:
·使用運算子new分配的物件被delete刪除。
·乙個具有塊作用域的本地(自動)物件超出其作用域。
·臨時物件的生存期結束。
·程式結束執行。
·使用完全限定名顯示呼叫物件的析構函式。
有幾條規則約束著析構函式的說明:
·不能接受參量。
· 不能說明有任何返回型別(包括void)。
·不能用return語句返回值。
· 不能說明為const、volatile或static,但析構函式可以因說明為const、volatile或static的物件的析構而被呼叫。
·可以說明為虛擬的。使用虛析構函式,可以撤消物件而不必知道該物件的型別。由於使用虛函式機制,程式將呼叫該物件的正確的析構函式。
虛析構函式的作用和用法
我們已經介紹過析構函式 詳情請檢視 c 析構函式 它的作用是在物件撤銷之前做必要的 清理現場 的工作。當派生類的物件從記憶體中撤銷時一般先呼叫派生類的析構函式,然後再呼叫基類的析構函式。但是,如果用new運算子建立了臨時物件,若基類中有析構函式,並且定義了乙個指向該基類的指標變數。在程式用帶指標引數...
對C 析構函式的簡單理解
被同學問到這樣乙個問題 下面這段程式執行的時候,沒有執行析構函式?class test int main 問題出在system pause 這裡。在c 中如果定義了物件,並且物件中定義了變數等,那麼程式執行的時候就會給它分配記憶體,如果不手動銷毀的話,物件會一直存在的,這些記憶體會一直被占用,這是乙...
析構函式的奧秘
class b class c public b private a a int main int argc,char argv 類c從類b中繼承出來,類c中聚合了乙個類a的物件,類c的析構函式並未呼叫類a的析構函式,請問 這段 執行後,會呼叫類a的析構函式釋放記憶體嗎?經測試,執行結果如下 con...