C++ static对象 和析构函数的关系

本文探讨了C++中static对象如何影响析构函数的调用顺序。在重载加法运算符时,由于static变量不会在return后立即析构,可以避免返回对象被错误地释放。同时,文章提到了析构函数调用的顺序:子函数内的非static变量 -> main函数的非static变量 -> static变量,并强调了static变量只初始化一次的特点,这种特性使得它们在某些场景下充当“锁存信号”的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

用C++实现一个矩阵类:类的定义如下图


1>子函数返回static变量

例如:重载+运算符时,想要实现矩阵类对象相加,形如M3=M2+M1的功能。加法的操作数有两个M2、M1,其中M2是this指针指向的对象,M1为传进的对象参数。

如下图所示,加法运算符返回一个对象。该对象是局部变量,如果定义为普通的变量,那么return后立刻调用析构函数释放该对象的内存,释放后该变量的内存就是未知的了,这样会在main函数中产生对未知内存访问的错误。我的解决办法:将该对象定义为static的,这样就不会return后立刻调用析构函数了,而是等到程序结束时才会调用。

补充:

关于析构函数的调用先后顺序(只讨论static和非static变量):

子函数非static变量——>main函数中的非static变量——>static变量

同一等级的变量根据创建先后顺序调用析构函数,遵循先创建后析构的原则。

2>关于static变量

1 static变量存在于全局/静态存储区,该区域的变量在程序最后才会被释放。

2 staitc变量初始化不会执行第二次,详细介绍请看下面的例子

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值