作用:
建立物件時系統會自動呼叫建構函式進行初始化工作,同樣,銷毀物件時系統也會自動呼叫乙個函式來進行清理工作(例如**建立物件時消耗的各種資源),這個函式被稱為析構函式。
析構函式(destructor)也是一種特殊的成員函式,沒有返回值,不需要使用者呼叫,而是在銷毀物件時自動執行。與建構函式不同的是,析構函式的名字是在類名前面加乙個」~「符號。
特點:
析構函式的作用並不是刪除物件,而是在撤銷物件占用的記憶體之前完成一些清理工作,使這部分記憶體可以被程式分配給新物件使用
。析構函式不返回任何值,沒有函式型別,也沒有函式引數。因此它
不能被過載
。乙個類可以有多個建構函式,但只能有乙個析構函式。當然,析構函式也可被用來執行「使用者希望在最後一次使用物件之後所執行的任何操作」,例如輸出有關的資訊。如果使用者沒有定義析構函式,c++編譯系統會自動生成乙個析構函式,實際上什麼操作都不進行。
在一般情況下,
呼叫析構函式的次序正好與呼叫建構函式的次序相反
:最先被呼叫的建構函式,其對應的(同一物件中的)析構函式最後被呼叫,而最後被呼叫的建構函式,其對應的析構函式最先被呼叫
。例子:
#include
using namespace std;
class student;
student::student(char*name1,intage1,floatscore1):name(name1),age(age1),score(score1){};
student::~student()
void student::say()
int main()
執行結果:
小明的年齡是 15,成績是 90.5
李磊的年齡是 16,成績是 95
王爽的年齡是 16,成績是 80.5
main 函式即將執行結束
王爽再見
李磊再見
小明再見
C 析構函式 虛析構函式
1.為什麼要定義虛析構函式?如果有乙個帶有虛函式功能的類,則它需要乙個虛析構函式,原因如下 1 如果乙個類有虛函式功能,它經常作為乙個基類使用 2 如果它是乙個基類,它的派生類經常使用new來分配 3 如果乙個派生類物件使用new來分配,並且通過乙個指向它的基類的指標來控制,那麼它經常通過乙個指向它...
C 析構函式和虛析構函式。
析構函式如果不是虛的話,基類的析構函式將不會被呼叫。多型時,也就是派生類被基類指標所指,或者被基類別名 虛析構函式,被呼叫時,其自身的析構函式和基類的析構函式都將會被呼叫。非虛的時候,不進行多型,只有基類的會被呼叫。純虛析構函式 定義的時候除了加 0 還需要給出函式的實現。因為當遞迴的呼叫析構函式時...
C 建構函式 析構函式 虛析構函式
一般地,建立物件和刪除物件時,父類建構函式 子類建構函式 子類析構函式 父類析構函式。特例 如果用new建立了乙個物件,並將父類的指標指向這個子類的物件,那麼用delete撤銷物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。如果希望按照子類析構函式 父類析構函式的順序執行,那麼應該將基類...