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