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