C 0505 析構函式

2021-09-21 05:40:55 字數 1316 閱讀 2333

析構函式

建構函式確保乙個物件被正確建立並初始化。與之相反,析構函式確保乙個物件銷毀前被正確清理。

生成的析構函式

如果乙個類的成員擁有乙個析構函式,則在包含這個成員的物件銷毀時這個析構函式會被呼叫。

析構函式和自由空間

析構函式概念上很簡單,但他是大多數最有效的c++程式設計技術的基礎。

基本思想是:

無論乙個類物件需要使用那些資源,這些資源都要在建構函式中獲取。

在物件的宣告週期中,他可以釋放資源並獲得新的資源。

在物件的宣告週期結束後,析構函式釋放物件擁有的所有資源。

shape* fct()

, "annemarie"};

// ..

shape* p = new text,"nicholas"};

return p;

}void f()

實際上,shape的析構函式是virtual的,這就是問題的關鍵。當我們使用delete q時,

delete q會呼叫shape的析構函式~shape。但是,~shape()是virtual的,因此使用virtual呼叫機制

注意,析構函式是通過delete來隱式或間接呼叫的,不會直接呼叫,這樣能省去很多麻煩的工作。

訪問元素

class vector

, elem //建構函式

~vector() //析構函式

int size() const //當前大小

double get(int n) const //訪問:讀

void set(int n, double v) //訪問:寫

};vector v(5);

for (int i=0; i

指向類物件的指標

vector* f(int s)

void ff()

注意,當我們delete乙個vector時,它的析構函式會被呼叫。

vector* p = new vector(s); //在自由空間中分配乙個vector

delete p; //釋放

當在自由空間中建立乙個vector時,new運算子:

首先為vector分配記憶體。

然後,呼叫vector的建構函式來初始化vector;建構函式為vector的元素分配記憶體,並初始化這些元素。

當刪除vector時,delete運算子:

首先呼叫vector的析構函式;這個析構函式呼叫元素的析構函式(如果他們有析構函式),然後釋放元素使用的記憶體。

然後,釋放vector使用的記憶體。

vector>* p = new vector>(10);

delete p;

C 析構函式 虛析構函式

1.為什麼要定義虛析構函式?如果有乙個帶有虛函式功能的類,則它需要乙個虛析構函式,原因如下 1 如果乙個類有虛函式功能,它經常作為乙個基類使用 2 如果它是乙個基類,它的派生類經常使用new來分配 3 如果乙個派生類物件使用new來分配,並且通過乙個指向它的基類的指標來控制,那麼它經常通過乙個指向它...

C 析構函式和虛析構函式。

析構函式如果不是虛的話,基類的析構函式將不會被呼叫。多型時,也就是派生類被基類指標所指,或者被基類別名 虛析構函式,被呼叫時,其自身的析構函式和基類的析構函式都將會被呼叫。非虛的時候,不進行多型,只有基類的會被呼叫。純虛析構函式 定義的時候除了加 0 還需要給出函式的實現。因為當遞迴的呼叫析構函式時...

C 建構函式 析構函式 虛析構函式

一般地,建立物件和刪除物件時,父類建構函式 子類建構函式 子類析構函式 父類析構函式。特例 如果用new建立了乙個物件,並將父類的指標指向這個子類的物件,那麼用delete撤銷物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。如果希望按照子類析構函式 父類析構函式的順序執行,那麼應該將基類...