C++ 析构函数
接下来,我们准备为大家介绍"析构函数"。
(1)析造函数的名字必须与类名相同,且整个类中只有一个。
(2)析构函数没有返回类型,没有参数。
(3)析构函数在类的"对象"生命周期结束之前会被系统自动调用。
(4)可以在析构函数中对已经分配的资源进行释放,例如,通过new所分配的内存空间,在对象
生命周期结束之前就要释放掉。
析构函数的语法格式如下:
~ 类名()
{
代码;
}
语法格式分析:
(1)波浪符号~ 格式要求,不能省略。
(2)必须是所在类的类名。
(3)一对大括号,代表函数的主体。
(4)在大括号中可以编写函数主体的代码。
接下来,我们就结合例子来作进一步的学习
例子1:
Class DongWu //动物类
{
public:
int head; //头
int body; //身
int Leg; //腿
int x; //移动的距离
char *name; //名字
DongWu() //构造函数
{
head = 1;
body = 1;
Leg = 4;
Tail = 1;
name = new char[50]; //通过new分配字符数组的内存空间,并返回内存空间的起始地址给name
}
~DongWu()
{
delete name; //释放name所指向的内存空间
}
void MX(); //移动的方法
};
void main()
{
DongWu Cow1; //定义对象Cow1,同时,系统自动调用了构造函数,并在构造函数中通过
new分配了内存空间,并返回内存空间的起始地址给属性name。
DongWu *Cow2; //定义了指针对象Cow2
Cow2 = new DongWu; //首先,调用构造函数,然后,在构造函数中,通过new分配内存空间,
并返回内存空间的起始地址给属性name。
然后,再通过new分配内存空间,并返回内存空间起始地址给Cow2。
delete Cow2; //调用delete前先调用析构函数,将name所指向的内存空间释放掉,
然后,再释放Cow2所指向的内存空间。
}
代码分析:
(1)在DongWu类中,添加了一个name属性,用于存放名字。
(2)在构造函数中,通过new分配字符数组的内存空间,并返回内存空间的起始地址给name
(3)在类中添加了析构造函数,并在析构函数中通过delete对name所指向的内存空间进行释放
(4)当类所定义的对象Cow1在生命周期结束时,即main函数执行完毕时,系统就会自动调用类中的析
构函数,这样,就可以将对象所占用的资源,即name所指向的内存空间释放掉。
(5)代码中再定义了指针对象Cow2,并通过new分配了内存空间。
(6)当通过delete释放Cow2所指向的内存空间时,会先调用类中的析构函数,从而,先将name所指向的
内存空间通过delete释放掉,然后,再释放类的指针对象Cow2所指向的内存空间。
通过上面的学习,相信大家对析构造函数有了一个初步了解,但是,如何灵活地运用这个知识点呢?那么,我们就要通过下方的按钮进入到游戏中,然后,运用该知识点去完成任务,这样,才可以加深大家对该知识点的理解和运用,以及“尽快进入到编程的状态”。
要达到灵活运用,是需要通过不停地反复训练才可以做到,所以,不要停留在理论规则上面,快动起来吧!
(通过游戏模式学习与训练,需要在电脑上运行)