C 基礎 11 析構函式

2022-02-07 21:32:46 字數 1330 閱讀 3319

一、析構函式

析構函式(destructor)用於析構類的例項。即在類的例項被銷毀之前,執行資源的清理或者釋放非託管資源。下面的**示例中宣告了乙個名為car的類,該類包含乙個名為~car的析構函式:

1

class

car2

7 }

析構函式的特徵如下:

1.不能在結構中定義析構函式。

只能對類使用析構函式。

2.每個類只能有乙個析構函式。

3.析構函式名為:"~"+類名,比如~car。

4.析構函式不能帶訪問修飾符。

5.析構函式不能帶引數,自然也無法過載。

6.析構函式是用來析構類的例項的,因此沒有靜態析構函式。

7.不能顯式呼叫析構函式。析構函式是在垃圾收集過程中被自動呼叫的:如果垃圾**器認為某個物件符合析構,則呼叫析構函式(如果有)並**用來儲存此物件的記憶體。

程式退出時也會呼叫析構函式。

8.該析構函式隱式地對物件的基類呼叫 finalize

。反編譯上例的類car,得到下面的結果:

1

internal

class

car2

該**包括乙個建構函式和乙個重寫的finalze方法,其實這就是建構函式編譯之後的**。

下面是另外乙個析構函式的示例:下面的示例建立三個類,這三個類構成了乙個繼承鏈。

類 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的析構...