有如下的类:
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的变量可以延迟到用户第一次进入到初始化代码时才执行,而且执行过程可根据用户输入而改变,甚至可以按照正确的“先创建后销毁”进行!