您的位置:首页 > 编程语言 > C语言/C++

C++函数中的static变量初始化及析构顺序

2011-09-28 21:13 381 查看
有如下的类:

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的变量可以延迟到用户第一次进入到初始化代码时才执行,而且执行过程可根据用户输入而改变,甚至可以按照正确的“先创建后销毁”进行!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: