C++中静态对象迷惑
C++中静态对象疑惑#includeiostream.hclass Sample{int xpublic:Sample(int a){xacoutconstructin
C++中静态对象疑惑
#include<iostream.h>
class Sample
{
int x;
public:
Sample(int a)
{ x=a;
cout<<"constructing object:x="<<x<<endl;
}
};
void func(int n)
{
static Sample obj(n);
}
void main()
{
func(1);
func(10);
}
程序结果constructing object:x=1,那个func(10);没有调用吗??????
[解决办法]函数内部的静态对象的初始化只进行一次。
函数内部的静态对象的初始化将在该函数第一次被调用时执行。
所以在func(1)时,static Sample obj被初始化,构造函数的参数为1.
在func(10)时,obj不再进行初始化。
[解决办法]是的,没有调用,static对象只会在你的fun里面被执行一次,但是他的生命周期是程序结束,它也就死掉了。
[解决办法]函数内的static变量,只有第一次调用的时候会创建
[解决办法]func(10) 调用了函数,但是跳过了唯一的一行代码,调用的是个空函数
[解决办法]静态变量是全局的生存期、局部的作用域。
也就是说我们在调用func(1); 与func(10);时是在对同一个obj对象操作
(因为局部静态变量是建在静态数据区中而不是栈当中)。
对于构造函数而言,在对象生存期内只能调用一次(对象创建后第一次被调用前)
所以就出现了执行的结果。