C 析構函式

2022-08-30 19:18:10 字數 1020 閱讀 7123

析構函式當應用程式封裝視窗、檔案和網路連線這類非託管資源時,應當使用析構函式釋放這些資源。 析構函式用於析構類的例項。

例如,下面是類car的析構函式的宣告:

class car

}

該析構函式隱式地對物件的基類呼叫 finalize。這樣,前面的析構函式**被隱式地轉換為:

protected

override

void finalize()

finally

}

這意味著對繼承鏈中的所有例項遞迴地呼叫finalize方法(從派生程度最大的到派生程度最小的)。使用空析構函式,finalize佇列中則會建立乙個項,會導致不必要的效能丟失。

資源的顯式釋放

如果您的應用程式在使用昂貴的外部資源,則還建議您提供一種在垃圾**器釋放物件前顯式地釋放資源的方式。可通過實現來自 idisposable 介面的dispose方法來完成這一點,該方法為物件執行必要的清理。這樣可大大提高應用程式的效能。即使有這種對資源的顯式控制,析構函式也是一種保護措施,可用來在對dispose方法的呼叫失敗時清理資源。

清理非託管資源

1.實現 dispose 方法

描述用於釋放非託管資源的 dispose 方法的實現。

2.重寫 finalize 方法

描述 finalize 和 dispose 方法的合作方式。

3.c# 與 c++ 中的析構函式語法

描述 finalize 方法在 c# 和 c++ 中的等效方法

4.使用封裝資源的物件

描述確保 dispose 方法得到呼叫的方式,例如 c# using 語句(在 visual basic 中為 using)。

參考:ms-help:

C 析構函式 虛析構函式

1.為什麼要定義虛析構函式?如果有乙個帶有虛函式功能的類,則它需要乙個虛析構函式,原因如下 1 如果乙個類有虛函式功能,它經常作為乙個基類使用 2 如果它是乙個基類,它的派生類經常使用new來分配 3 如果乙個派生類物件使用new來分配,並且通過乙個指向它的基類的指標來控制,那麼它經常通過乙個指向它...

C 析構函式和虛析構函式。

析構函式如果不是虛的話,基類的析構函式將不會被呼叫。多型時,也就是派生類被基類指標所指,或者被基類別名 虛析構函式,被呼叫時,其自身的析構函式和基類的析構函式都將會被呼叫。非虛的時候,不進行多型,只有基類的會被呼叫。純虛析構函式 定義的時候除了加 0 還需要給出函式的實現。因為當遞迴的呼叫析構函式時...

C 建構函式 析構函式 虛析構函式

一般地,建立物件和刪除物件時,父類建構函式 子類建構函式 子類析構函式 父類析構函式。特例 如果用new建立了乙個物件,並將父類的指標指向這個子類的物件,那麼用delete撤銷物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。如果希望按照子類析構函式 父類析構函式的順序執行,那麼應該將基類...