一、什麼是析構函式?
析構函式也是一種特殊的成員函式。它執行與建構函式相反的操作,通常用於執行一些清理任務,如釋放分配給物件的記憶體空間等。
二、析構函式的特點是什麼?
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 ...