一、析構函式
析構函式(destructor)用於析構類的例項。即在類的例項被銷毀之前,執行資源的清理或者釋放非託管資源。下面的**示例中宣告了乙個名為car的類,該類包含乙個名為~car的析構函式:
1析構函式的特徵如下:class
car2
7 }
1.不能在結構中定義析構函式。
只能對類使用析構函式。
2.每個類只能有乙個析構函式。
3.析構函式名為:"~"+類名,比如~car。
4.析構函式不能帶訪問修飾符。
5.析構函式不能帶引數,自然也無法過載。
6.析構函式是用來析構類的例項的,因此沒有靜態析構函式。
7.不能顯式呼叫析構函式。析構函式是在垃圾收集過程中被自動呼叫的:如果垃圾**器認為某個物件符合析構,則呼叫析構函式(如果有)並**用來儲存此物件的記憶體。
程式退出時也會呼叫析構函式。
8.該析構函式隱式地對物件的基類呼叫 finalize
。反編譯上例的類car,得到下面的結果:
1該**包括乙個建構函式和乙個重寫的finalze方法,其實這就是建構函式編譯之後的**。internal
class
car2
下面是另外乙個析構函式的示例:下面的示例建立三個類,這三個類構成了乙個繼承鏈。
類 first 是基類,second 是從 first 派生的,而 third 是從 second 派生的。
這三個類都有析構函式。
在 main() 中,建立了派生程度最大的類的例項。
注意:程式執行時,這三個類的析構函式將自動被呼叫,並且是按照從派生程度最大的到派生程度最小的次序呼叫。
view code
1二、何時使用析構函式?class
first27
}89class
second : first
1015}16
17class
third : second
1823}24
25class
program
2637 }
通常,與執行時不進行垃圾**的開發語言相比,c# 無需太多的記憶體管理。
這是因為 .net framework 垃圾**器會隱式地管理物件的記憶體分配和釋放。
但是,當應用程式封裝視窗、檔案和網路連線這類非託管資源時,應當使用析構函式釋放這些資源。
當物件符合析構時,垃圾**器將執行物件的 finalize 方法。
三、顯式釋放資源
參考:
C 基礎 析構函式
二,使用析構函式的有什麼用?一,程式設計師無法控制何時呼叫析構函式,因為這是由垃圾 器決定的。垃圾 器檢查是否存在應用程式不再使用的物件。如果垃圾 器認為某個物件符合析構,則呼叫析構函式 如果有 並 用來儲存此物件的記憶體。程式退出時也會呼叫析構函式。二,使用析構函式釋放資源 通常,與執行時不進行垃...
C 基礎 析構函式
c 析構函式 1.析構函式的定義與注意的問題 析構函式用於釋放被占用的系統資源。析構函式的名字由符號 加類名組成。使用析構函式時,應該注意下面的問題 只能在類中使用析構函式,不能在結構中使用析構函式。乙個類只能有乙個析構函式。不能繼承或過載析構函式。析構函式只能被自動呼叫。析構函式沒有任何修飾符 沒...
C 構造與析構 11 析構函式的行為
include using namespace std int i class a int foo int main 上述程式的輸出結果 i 3 為何結果是3,而不是10?當從乙個函式返回時,析構函式屬於乙個最後才被執行的方法。當i值已經拷貝給函式的返回值 return value 之後,ob的析構...