您的位置:首页 > 其它

static成员变量,non-static成员变量,局部变量,global 变量作用域和生存周期

2016-07-03 20:19 513 查看
同一个类

生存周期

编译,运行.内存中创建.

(编译的时候存在的变量,运行的时候存在的变量,堆栈是在代码段,内存泄露都是代码段)

作用域/作用

定义(声明)/Init赋值/调用

成员变量



局部变量

 

在编译的时候只有static的成员变量

存在。

Non-static的成员变量和局部变量都是在运行的时候在存在的。

类中作用域:

Local变量作用域是子函数。

成员变量相当于c的全局变量。

 

局部变量在局部函数定义,赋值和退出销毁。

成员变量见正下面的table

Static成员变量

Non- Static

成员变量

 

Static变量在编译的时候和类同时就存在了.

所有对象共享一份。

Non-static 变量在对象new出来的时候,

在构造函数中创建。

每个对象一份。

每个对象不同。

常用作用:

Static变量可以统计有多少

个对象实际存在.

 

因为cascadeHdlrs数组

是static变量.

Static CascadeHdlrEntry cascadeHdlrs

[CASCADE_HDLR_NUMBER_OF_ENTRIES];

所以其数组struct中data也是static的.

(虽然pHldr 不是每个对象一份,但是这与它可以随便指向任何baseclass和更换不同的subclass没关系)

Static 成员变量在类外初始化.不能在函数内初始化.因为成员函数是在new出对象之后才有.而且每个对象一份。但是static在它之前就有了。所以在类外初始化在编译的时候就完成了初始化init。

初始化init要类直接调用的形式。

CascadeMgr* CascadeMgr::sInstance = NULL;

Non static的成员变量在构造函数中初始化。

在函数中直接使用.

Global 变量

和static变量一样,在编译的时候就存在了

可以跨对象,即每个对象都可以使用,这点与成员变量不同,成员变量仅仅是自己对象内使用.

成员变量每个对象自己一份。(类中的成员变量实际是模板定义,这个每个对象都有这个变量 .类不可使用成员变量,仅仅使用static变量 .对象给自己的成员变量赋值)

在class 类外定义和初始化

Notes: 上述总结需要一个例子------------------finding(prioritylow)

思考角度站在high level从编译,运行角度看问题

下述概念摘自网络:

在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。

全局变量:也叫成员变量,是指在类中定义的变量;它在整个类中都有效

               全局变量又可分为:类变量和实例变量

               1.类变量:又叫静态变量  用static修饰  它可以直接用类名调用  也可以用对象调用   而且所有对象的同一个类变量都是共享同一块内存空间的

               2.实例变量:不用static修饰  它只能通过对象调用  而且所有对象的同一个实例变量是共享不同的内存空间的

比如:成员变量不能按照static变量的使用方式使用,会报错

error C2597: illegal reference to non-static member 'CNetToolThread::m_bFtpConfigError'

   2: {}作用域:can;t create memory forever, because {} is 作用域. when go out {} for one time , the string and int will disappear

   while(1)

   {
int a=1;
string a(1);

   }

3 static 变量的调用

类和对象都可以调用

类::val

对象->val.   实现多个对象共享一个变量 ,多个对象调用的是同一个static variable  



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: