构造函数与析构函数

1.构造函数

在之前我们都是利用Init函数对对象中的数据进行初始化的,而C++中提供了一种较为高效的初始化方式——构造函数

类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。

构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。创建类类型对象时由编译器自动调用,以保证每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次。

构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任 务并不是开空间创建对象,而是初始化对象。

默认的构造函数:当我们未显式定义构造函数的时候,此时编译器会给我们提供一个构造函数,这个构造函数也被称为默认构造函数,这种构造函数的函数体是空的,参数也没有;所以用户在创建对象的时候如果需要数据成员存在初值,就必须自己定义构造函数!

如果写了构造函数,那么默认函数就不存在了

无参的构造函数:

有参数的构造函数:

2.析构函数

析构函数:是一个特殊的成员函数,他的作用与构造函数相反,它的命名前需要加上“~”,也是没有返回值与类型的!

类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。

与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。

析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。

当我们用C语言写栈时,要对栈进行初始化和销毁,在写栈的时候我们可能会忘记把栈销毁,如果不对栈进行销毁,可能会造成内存泄漏,这是很危险的,但当我们学会C++的析构函数之后,析构函数就会自动调用,销毁栈,用起来就会很方便。

析构函数的调用情况:
如果一个函数定义了一个对象(局部对象),当这个函数调用结束时,对象应该被释放,在对象释放前会自动执行析构函数!
静态(static)局部对象在函数调用结束对象并不会被释放,当main函数结束或者调用exit函数结束程序时,会调用析构函数!
如果定义了一个全局的变量,则在程序的流程离开其作用域时,调用该全局对象的析构函数!
当用new建立对象时,当用delete运算符释放该对象时先调用析构函数!

3.析构函数与构造函数的调用顺序

先构造的后析构,后构造的先析构

注:

如果在全局范围定义对象,那么它的构造函数在本文件模块中的所有函数执行之前调用,如果一个程序包含多个文件,那么它的构造函数的调用顺序是不确定的,当main函数结束或者调用exit结束程序时,调用析构函数!
如果定义局部对象,那么定义时自动调用构造函数,函数调用结束时,调用析构函数!
如果定义静态函数,则只在程序调用的第一次调用构造函数,当main函数结束时或者调用exit函数时调用析构函数!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值