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

来源:互联网 发布:单片机开发板怎么做得 编辑:程序博客网 时间:2024/05/16 12:37

背景:

用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变量初始化不会执行第二次,详细介绍请看下面的例子


如果 红色部分的变量不是static类型的,那么输出肯定是:doublem=10;doublen=10。现在doubletimes()子函数中sum变量时static类型的,返回结果如下图:

说明:static变量初始化只会执行一次,有种“锁存信号”的功能。要想重新初始化static变量,必须重新对其赋值。如下图:






0 0
原创粉丝点击