C 析構函式

2021-07-28 12:32:52 字數 1056 閱讀 2889

析構函式(destructor)也是乙個特殊的成員函式,它的作用和建構函式相反。定義是在類名前面加上「~」,如 ~box()。

當物件的生命週期結束時,自動呼叫析構函式。

呼叫析構函式由以下幾種情況:

<1>.在乙個函式中建立了乙個物件,在這個函式執行結束的時候自動執行析構函式,對物件進行釋放

<2>.但static修飾的區域性物件在函式呼叫結束後不釋放物件。在mian函式或者是exit函式終止程式的時候呼叫析構函式。

<3>.在new建立乙個物件 用delete釋放的時候會呼叫析構函式。

析構函式的呼叫不是來刪除物件,而是在撤銷物件占用記憶體前做的清理工作。方便給新的物件使用記憶體空間,使用者只需要在類了設定析構函式,在物件生命週期結束的時候系統會自動呼叫析構函式。析構函式沒有返回值,沒有引數,故不能進行函式過載,乙個函式中能存在多個建構函式,但只能存在乙個析構函式。

實際上析構函式不侷限為釋放空間,還能進行對物件的最後一次任意操作。

例如以下程式:

#include

using

namespace

std;

class box

double volumebox()

~box()

private:

double length;

double width;

double height;

double volume;

};int main()

輸出結果為:

volume=120

volume=60

successful

success

輸出順序是 b1.volumebox();—>b2.volumebox();–>b2的析構函式—>b1的析構函式。

執行順序為 :物件1的建構函式—–>物件2的建構函式—–>物件3的建構函式—–>物件3的析構函式—–>物件2的析構函式—–>物件1的析構函式

先構造的先析構,後構造的後析構。相當於乙個棧先進先出。

C 析構函式 虛析構函式

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

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

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

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

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