程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> VC++深入詳解:析構函數

VC++深入詳解:析構函數

編輯:關於VC++

當一個對象的生命周期結束時,我們應該去釋放這個對象所占有的資源,這可以利用析構函數來完成。析構函數的定義格式為:~類名(),如:~point()。

析構函數是“反向”的構造函數。析構函數不允許有返回值,更重要的是析構函數不允許帶參數,並且一個類中只能有一個析構函數。析構函數的作用正好與構造函數相反,析構函數用於清除類的對象。當一個類的對象超出它的作用范圍,對象所在的內存空間被系統回收,或者在程序中用delete刪除對象時,析構函數將自動被調用。對一個對象來說,析構函數是最後一個被調用的成員函數。

根據析構函數的這種特點,我們可以在構造函數中初始化對象的某些成員變量,為其分配內存空間(堆內存),在析構函數中釋放對象運行期間所申請的資源。

例如,下面這段程序:

class Student
  {
  private:
    char *pName;
  public:
    Student()
    {
      pName=new char[20];
  }
  ~Student()
  {
      delete[] pName;
  }
  };

在Student類的構造函數中,給字符指針變量pName在堆上分配了20個字符的內存空間,在析構函數中調用delete,釋放在堆上分配的內存。如果沒有delete[] pName這句代碼,當我們定義一個Student的對象,在這個對象生命周期結束時,在它的構造函數中分配的這塊堆內存就會丟失,造成內存洩漏。

提示:在類中定義成員變量時,不能直接給成員變量賦初值。例如:

class point
  {
    int x=0;//錯誤,此處不能給變量x賦值。
    int y;
  };

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved