当前位置: 首页 > news >正文

C++中的析构函数

目录

一、什么是析构函数:

二、析构函数的特性:


一、什么是析构函数:

        C++中的析构函数非常简单,它的功能无非是帮助我们自动归还堆区的空间给操作系统。当我们使用内存开辟函数(如malloc()、realloc())等,如果忘记使用free()函数归还所开辟的空间,在有些时候就可能造成内存泄漏(比如调用一个函数去开辟空间,结果没有将空间释放,出了函数之后,指向所开辟空间的指针找不到了,这块空间也就找不到了,引发了内存泄漏)。

        所以为了避免这种情况,C++中提供了析构函数,同样我们如果不创建,编译器会自动生成,当对象销毁时,编译器会自动效用该函数,完成对象中资源清理的工作,来帮助我们归还所动态开辟的空间。

二、析构函数的特性:

1、析构函数完成对象中资源清理的工作,并不是销毁对象

2、析构函数是在类名前面加上字符“~”。

3、析构函数无参数、无返回值、无返回值类型。

4、一个类只能有一个析构函数,若未定义,则编译器会自动生成一个析构函数。

5、对象生命周期结束后,C++编译器系统自动调用析构函数。

6、析构函数不构成函数重载

//析构函数
class Date
{
public:
	Date(int year = 1970, int month = 1, int day = 1)
	{
		_year = year, _month = month, _day = day;
	}

	void Print()
	{
		printf("%d/%d/%d\n", _year, _month, _day);
	}

	~Date()
	{
		cout << "~Date()" << endl;
	}

private:
	int _year;
	int _month;
	int _day;
};

int main()
{
	Date d;
	d.Print();//打印结果为:1970/1/1
	return 0;
}

        析构函数的功能是清理资源,日期类里面其实没有资源需要清理,一般自定义类型的析构函数(比如栈)里面有动态开辟的资源需要清理。析构函数特点是后定义的对象先析构,对于内置类型成员编译器不会处理,自定义类型成员会调用这个成员的析构函数。

相关文章:

  • 【cocos creator】热更新
  • SQL注入目录【绕过+布尔时间脚本】
  • 【从零开始学习计算机科学】计算机组成原理(六)异常事件处理
  • Manus无需邀请码即可使用的平替方案-OpenManus实测
  • 利用FatJar彻底解决Jar包冲突(一)
  • 【系统设计架构师】特定领域软件体系结构
  • MyBatis Mapper 接口的作用,以及如何将 Mapper 接口与 SQL 映射文件关联起来
  • 周鸿祎开始补录网安岗了
  • 2022IJCAI速读:SparseTT,使用稀疏Transformers进行视觉跟踪
  • EngineerCMS完整版发布,带freecad、math和mapus例子
  • es6+新增特性有哪些
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之功能优化,添加列宽调整功能Table12
  • 二分查找(递归和迭代)– Python
  • 我想写日记了
  • 新能源汽车充电综合解决方案:安科瑞电气助力绿色出行
  • 第二章:C++标准库
  • C++11新特性 11.基于范围的for循环
  • deepseek在pycharm中的配置和简单应用
  • ThinkPhp 5 安装阿里云内容安全(绿化)
  • DeepLabv3+改进6:在主干网络中添加SegNext_Attention|助力涨点
  • 中国戏剧梅花奖终评结果公示,蓝天和朱洁静等15名演员入选
  • 贵州茅台:支持工作餐不上酒的规定,请投资者相信茅台创新和自我调节能力
  • 上海明天短暂恢复晴热最高32℃,一大波雨水在候场
  • 俄乌刚谈完美国便筹划与俄乌领导人通话,目的几何?
  • 美国失去最后一个AAA评级,资产价格怎么走?美股或将触及天花板
  • 上海公办小学验证今起开始,下周一和周二分区进行民办摇号