C++函数中的static变量初始化及析构顺序
2011-09-28 21:13
381 查看
有如下的类:
1. 有如下调用方式
请问输出的信息是什么?
答案:
global Constructor!
local Constructor!
local Destructor!
global Destructor!
需要注意的是函数中的static变量由于函数没有被调用而没有被初始化~
那么接下来,我们使用如下代码:
当用户输入0时
global Constructor!
local Constructor!
R1 Constructor!
e Constructor!
local Destructor!
e Destructor!
R1 Destructor!
global Destructor!
当用户输入非0时
global Constructor!
local Constructor!
e Constructor!
R2 Constructor!
local Destructor!
R2 Destructor!
e Destructor!
global Destructor!
由此可见,static的变量可以延迟到用户第一次进入到初始化代码时才执行,而且执行过程可根据用户输入而改变,甚至可以按照正确的“先创建后销毁”进行!
class base { public: base(char* pStr) { m_pStr = pStr; cout << pStr << " Constructor!" << endl; } ~base() { cout << m_pStr << " Destructor!" << endl; } void fund(char* pStr) { if (pStr != NULL) { static base b(pStr); } } void fund2() { static base e("e"); } private: char* m_pStr; }; base glb("global");
1. 有如下调用方式
int main() { base loc("local"); return 0; }
请问输出的信息是什么?
答案:
global Constructor!
local Constructor!
local Destructor!
global Destructor!
需要注意的是函数中的static变量由于函数没有被调用而没有被初始化~
那么接下来,我们使用如下代码:
int main() { base d("d"); int i; cin >> i; if (i == 0) { d.fund(NULL); d.fund("R1"); d.fund2(); } else { d.fund2(); d.fund("R2"); } return 0; }
当用户输入0时
global Constructor!
local Constructor!
R1 Constructor!
e Constructor!
local Destructor!
e Destructor!
R1 Destructor!
global Destructor!
当用户输入非0时
global Constructor!
local Constructor!
e Constructor!
R2 Constructor!
local Destructor!
R2 Destructor!
e Destructor!
global Destructor!
由此可见,static的变量可以延迟到用户第一次进入到初始化代码时才执行,而且执行过程可根据用户输入而改变,甚至可以按照正确的“先创建后销毁”进行!
相关文章推荐
- c++ 类与函数中static变量初始化问题(转)
- C++ 模板类中的static变量和函数 初始化
- Java中static变量的初始化顺序
- 【转】C++成员变量的初始化顺序问题
- java堆空间子父类顺序(1)开辟空间都为0(2)父类初始化不管值(3)把成员变量赋值的显示初始化(4)构造代码块(5)子函数初始化
- 揭示C++中全局类变量的构造与析构顺序
- C++成员变量、构造函数的初始化顺序
- C++成员变量的初始化顺序问题
- c++中关键字static在普通变量及函数详解及实例运行答案
- C++ 成员变量的初始化顺序问题详解
- C++编码器军规(004):保持类成员变量定义和初始化的顺序一致
- C++全局变量初始化顺序
- C++成员变量的初始化顺序问题
- static 变量和static 构造函数 以及对象初始化顺序
- c++中 static 变量和函数能否被子类继承
- c++中关键字static在普通变量及函数详解及实例运行答案
- 揭示C++中全局类变量的构造与析构顺序
- static作用(修饰函数、局部变量、全局变量) C/C++中static关键字详解
- c++ 类中static变量初始化问题
- 从零开始学C++之对象的使用(一):static 成员变量、static 成员函数、类/对象的大小