類的構造函數是在生成類的對象時自動調用的,它用來初始化對象的數據成員。類的析構函數是以類名前加上“~”為函數名的函數,它在刪除對象時自動調用,即程序執(zhí)行離開初始化類對象的范圍時調用。析構函數本身并不實際刪除對象,而是進行系統(tǒng)放棄內存之前的清理工作,使內存可以用于保存新的對象。
? 構造函數與析構函數是自動調用的,他們的調用順序取決于執(zhí)行過程進入和離開對象的順序。我們來舉個具體例子,來說明他們的調用順序。
?
//create.h
#ifndef CREATE_H
#define CREATE_H
?
class CreateAndDestroy{
public:
?? CreateAndDestroy(int); //構造函數
?? ~CreateAndDestroy(); //析構函數
private:
?? int data;
};
?
#endif
?
//ceate.cpp
#include
#include”create.h”
?
CreateAndDestroy::CreateAndDestroy(int value)
{
?? data = value;
?? cout<<”對象 ”<<data<<” 建立”;
}
?
CreateAndDestroy::~CreateAndDestroy()
{
?? cout<<”O(jiān)bject “<<data<<” destructor”<<endl;
}
?
//create1.h
#include
#include”create.h”
?
void create(void);
?
CreateAndDestroy first(1);//全局對象
?
int main()
{
?? cout<<”?? (全局對象在main之前建立)”<<endl;
?? CreateAndDestroy second(2);??? //局部對象
?? cout<<”?? (局部自動對象在main函數內部建立)<<endl;
?
?? static CreateAndDestroy third(3);? //局部對象
?? cout<<”?? (局部靜態(tài)對象在main中建立)“<<endl;
?
?? create();? //調用create()建立對象
?
?? CreateAndDestroy fourth(4);?? //局部對象
cout<<”?? (局部自動對象建立)”<<endl;
return 0;
}????????
?
void create(void)
{
?? CreateAndDestroy fifth(5);
?? cout<<”?? (局部自動對象在create()中建立)”<<endl;
?
?? static CreateAndDestroy sixth(6);
?? cout<<”?? (局部靜態(tài)對象在create()中建立)”<<endl;
??
?? CreateAndDestroy seventh(7);
?? cout<<”?? (局部自動對象在create()中建立)”<<endl;
}
?
對象fourth和second的析構函數在到達main結尾時一次調用。由于third是static局部對象,因此到程序結束時才退出,在程序終止時刪除所有其他對象之后和調用first的析構函數之前調用對象third的析構函數。函數create聲明三個對象。對象fifth和seventh是局部自動對象,對象sixth是static局部對象。對象seventh和fifth的析構函數在到達create結尾時自動調用。由于對象sixth是static局部對象,因此到程序結束時才退出。sixth的析構函數在程序終止時刪除所有其他對象之后和調用third和first的新構函數之前調用。