13、析構(gòu)函數(shù)

1. 定義:

簡單來講,析構(gòu)函數(shù),是用來幫助我們來進(jìn)行廢棄對象的內(nèi)存回收的機(jī)制。

2. 語法:

    ~類名()
    {
        
    }

3. 示例:

class Car 
{ 
       ~Car() //析構(gòu)函數(shù)
       {

       }
}

4. 注意點:

  • 只能對類使用析構(gòu)函數(shù)。
  • 一個類只能有一個析構(gòu)函數(shù)。
  • 無法繼承或重載析構(gòu)函數(shù)。
  • 無法調(diào)用析構(gòu)函數(shù)。 它們是被自動調(diào)用的。
  • 析構(gòu)函數(shù)既沒有修飾符,也沒有參數(shù)。
  • 不應(yīng)使用空析構(gòu)函數(shù)。 如果析構(gòu)函數(shù)為空,只會導(dǎo)致不必要的性能損失。

5. 作用:

程序員無法控制何時調(diào)用析構(gòu)函數(shù),因為這是由垃圾回收器決定的。 垃圾回收器檢查是否存在應(yīng)用程序不再使用的對象。 如果垃圾回收器認(rèn)為某個對象符合析構(gòu),則調(diào)用析構(gòu)函數(shù)(如果有)并回收用來存儲此對象的內(nèi)存。 程序退出時也會調(diào)用析構(gòu)函數(shù)。
通常,與運行時不進(jìn)行垃圾回收的開發(fā)語言相比,C# 無需太多的內(nèi)存管理。 這是因為 .NET Framework 垃圾回收器會隱式地管理對象的內(nèi)存分配和釋放。 但是,當(dāng)應(yīng)用程序封裝窗口、文件和網(wǎng)絡(luò)連接這類非托管資源時,應(yīng)當(dāng)使用析構(gòu)函數(shù)釋放這些資源。 當(dāng)對象符合析構(gòu)時,垃圾回收器將運行對象的Finalize方法。

6. 繼承鏈中析構(gòu)函數(shù)的釋放順序

        class First
        {
            ~First()
            {
                Console.WriteLine("First's destructor is called.");
            }
        }

        class Second : First
        {
            ~Second()
            {
                Console.WriteLine("Second's destructor is called.");
            }
        }

        class Third : Second
        {
            ~Third()
            {
               Console.WriteLine("Third's destructor is called.");
            }
        }

        class TestDestructors
        {
            static void Main()
            {
                Third t = new Third();
            }

        }
        /* Output :
            Third's destructor is called.
            Second's destructor is called.
            First's destructor is called.
        */
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虛擬機(jī)(JVM)垃圾回收器提供...
    簡欲明心閱讀 90,343評論 17 311
  • 一. 垃圾回收的意義 在C++中,對象所占的內(nèi)存在程序結(jié)束運行之前一直被占用,在明確釋放之前不能分配給其它對...
    Stan_Z閱讀 2,047評論 0 25
  • 1. 垃圾回收的意義在C++中,對象所占的內(nèi)存在程序結(jié)束運行之前一直被占用,在明確釋放之前不能分配給其它對象;而在...
    愛情小傻蛋閱讀 1,007評論 0 11
  • 29.理解引用計數(shù) Objective-C語言使用引用計數(shù)來管理內(nèi)存,也就是說,每個對象都有個可以遞增或遞減的計數(shù)...
    Code_Ninja閱讀 1,725評論 1 3
  • Java 面試題 整理自??途W(wǎng) 什么是Java虛擬機(jī)?為什么Java被稱作是“平臺無關(guān)的編程語言”? Java虛擬...
    GuaKin_Huang閱讀 10,753評論 19 265

友情鏈接更多精彩內(nèi)容