C++的构造函数和析构函数
扫描二维码
随时随地手机看文章
类的构造函数是在生成类的对象时自动调用的,它用来初始化对象的数据成员。类的析构函数是以类名前加上“~”为函数名的函数,它在删除对象时自动调用,即程序执行离开初始化类对象的范围时调用。析构函数本身并不实际删除对象,而是进行系统放弃内存之前的清理工作,使内存可以用于保存新的对象。
构造函数与析构函数是自动调用的,他们的调用顺序取决于执行过程进入和离开对象的顺序。我们来举个具体例子,来说明他们的调用顺序。
//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<<”Object “<<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<<” (局部静态对象在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<<” (局部静态对象在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的新构函数之前调用。