析構函式(C 學習筆記 19)

2021-08-31 16:31:48 字數 1580 閱讀 4570

一、什麼是析構函式?

析構函式也是一種特殊的成員函式。它執行與建構函式相反的操作,通常用於執行一些清理任務,如釋放分配給物件的記憶體空間等。

二、析構函式的特點是什麼?

1、析構函式名與類名相同,但它前面必須加乙個波浪號(~)。

2、析構函式不返回任何值。在定義析構函式時,是不能說明它的型別的,甚至說明為void型別也不行。

3、析構函式沒有引數,因此它不能被過載。乙個類可以有多個建構函式,但是只能有乙個析構函式。

4、撤銷物件時,編譯系統會自動地呼叫析構函式。

三、例子:既含有建構函式,又含有析構函式。

#include

#include

using

namespace std;

class

complex

; complex::

complex

(double r,

double i)

complex::

~complex()

double complex::

abscomplex()

intmain()

在執行主函式時先建立物件a,在建立物件a時呼叫建構函式,對物件a中的資料成員賦初值,然後呼叫a的函式abscomplex,計算並輸出物件a的複數的絕對值。在執行return語句之後,主函式中的語句已執行完畢,物件a的宣告週期結束,在撤銷物件a時要呼叫析構函式,釋放分配給物件a的儲存空間,並顯示資訊「destructor called.」。

執行結果如下:

說明:

1、每個類必須有乙個析構函式。若沒有顯式地為乙個類定義析構函式,則編譯系統會自動地生成乙個預設析構函式:

complex::~complex(){}

類似於系統自動地生成的預設建構函式,這個自動生成的預設析構函式也是空的,但是它能夠完成釋放物件所佔儲存空間的任務。

2、對於大多數類而言,這個預設析構函式就能滿足要求。但是,如果在乙個物件需要完成另外一些處理工作的話,則應該顯示地定義析構函式。例如:

class

string_data

~string_data()

void

get_info

(char*)

;void

sent_info

(char*)

;private

:char

*str;

};

這是建構函式和析構函式的常見用法,即在建構函式中用運算子new 為字串分配空間,最後再析構函式中用運算子delete釋放已分配的儲存空間。

3、析構函式被呼叫的情況:

①主函式結束(或呼叫exit函式)時,物件被撤銷,系統會自動呼叫析構函式。

②如果乙個物件被定義在乙個函式體內,則當這個函式體呼叫結束時,該物件將釋放,析構函式被自動呼叫。

③若乙個物件是使用new運算子動態建立的,在使用delete運算子釋放它時,delete會自動呼叫析構函式。

c 學習筆記 析構函式

宣告 註明 出處 析構函式 在建立物件的時候系統會自動呼叫建構函式,在物件需要被銷毀的時候同樣系統會自動呼叫乙個函式 析構函式與構造函式呼叫順序是反轉過來的,先呼叫建構函式的後呼叫析構函式。include using namespace std class test test private int...

C 學習筆記 虛析構函式

我們直接上案例 虛析構函式.cpp 定義控制台應用程式的入口點。include stdafx.h includeusing namespace std pragma warning disable 4996 class a a private char p class b public a b pr...

C 學習筆記 虛析構函式與純虛析構函式

開始學c 了,所以又重拾以前學習過的相關概念 析構函式是當乙個物件的生命週期結束時,會自動執行析構函式。析構函式的定義 define a h class a endif 虛析構函式與純虛析構函式的定義 假定類名為a define a h class a endif define a h class ...