解構函式為實現銷毀類別實例的方法成員。無參數、無修飾詞、不可被呼叫。因目的與建構函式相反,加前綴 ~ 區別。
雖 C# (CLR) 提供自動記憶體管理機制,資源釋放可由「垃圾收集器」自動完成,一般不需使用者干預,但特殊情況仍需解構函式,如非受控資源釋放。
需釋放非受控資源時,必須寫代碼解決。通常在解構函式中放入釋放非受控資源代碼段。若類別未使用非受控資源,絕對不要定義解構函式——物件執行解構函式時,垃圾收集器釋放受控資源前必先呼叫解構函式,再第二次才真正釋放受控資源,兩次刪除動作花費遠大於一次。
public class ResourceHolder
{
~ResourceHolder()
{
// 這裡是清理非受控資源的使用者代碼段
}
}
建構函式與解構函式雖形式簡單,但使用決非表面那麼簡單。靈活正確使用能幫助更好理解 CLR 記憶體管理機制,更好管理系統資源。