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
- C++ static对象 和析构函数的关系
- 黑马程序员--面向对象之一:面向对象概念、类和对象的关系、封装、构造函数、this关键字、static关键字
- static与类,构造、析构函数的关系
- C/C++中static变量和static函数的用法
- C/C++中static变量和static函数的用法
- C/C++中static变量和static函数的用法
- C/C++中static变量和static函数的用法
- static对象和非static对象构造和析构顺序的问题
- 转:JavaScript函数和对象的关系
- static 和 interface的关系
- static和extern的关系
- C#Static类和Static构造函数
- c语言static变量和static函数
- c库函数和系统函数的关系
- c语言中static 函数和普通函数的区别?
- c语言中static 函数和普通函数的区别?
- c语言中static 函数和普通函数的区别
- c语言中static 函数和普通函数的区别?
- 微型投影仪第五篇——Metro UI
- Git远程操作详解
- Planar Homographies (平面单应矩阵)
- 原生js中创建ajax
- 有趣的KVC-几行代码打造一个万能容器对象
- C++ static对象 和析构函数的关系
- Chrome浏览器扩展开发系列之七:override页面
- PHP无限极分类,多种方法|很简单,这里说的很详细,其它地方说的很不好懂
- 无人机光流定位系列——(一)原理剖析
- AngularJS——$http
- 操作系统中进程和线程的一些概念
- js图片等比缩放程序代码
- js把日期字符串转换成时间戳
- DWR