首页
社区
课程
招聘
静态对象初始化时机
发表于: 2015-7-10 22:21 3952

静态对象初始化时机

2015-7-10 22:21
3952
《C++反汇编与逆向工程技术》中提到,静态对象在main函数之前初始化,

这是指全局静态对象还是指全局和局部静态对象都是?要是静态对象也在main函数外部初始化的话
class A
{
public:
        A(char* ps)
        {
                strcpy(s, ps);
                cout << "Con " << s << endl;
        }
        ~A()
        {
                cout << "Dec " << s << endl;
        }
private:
        char s[50];
};

int main()
{
        A a("a");
        static A b("b");
        return 0;
}
运行结果中却是先构造a,再构造b。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 7
活跃值: (125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
局部静态对象则在“某个时刻”初始化一次且仅一次;若他初始化过,就必须且只能在程序退出时析构。

    那么在何时初始化呢? 唯一的答案是:“在第一次运行到其定义的时候”。 因为构造函数往往有参数 —— 系统不可能在 main 开始之前就确定所有参数。
更具体的可参看此帖子
http://blog.csdn.net/ox_thedarkness/article/details/597036
2015-7-14 16:06
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
在函数中的static修饰的对象是指无论这个函数执行多少次,他只在第一次执行时初始化,后面每次再次执行到这个函数时不再初始化这个对象,而是继续使用上次的值。
举个例子
void fun(){
static int i = 0;
  i++;
  cout<<i;
}

int main()
{
  for(int i = 0; i < 100;i++){
      fun();
}
  return 0;
}

这种情况下程序的输出结果就是从0->99,
2015-7-14 22:26
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
你好像没看清我在问什么,我是说静态对象,不是类里的静态变量
2015-7-15 21:39
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
那书上说的怎么解释呢?
2015-7-15 21:42
0
雪    币: 7
活跃值: (125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
和实际的不一样,书上的错了呗~~~实践是检验真理的唯一标准
2015-7-17 15:10
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
hbsfhbsfhbsfnsfns
2015-7-25 02:42
0
游客
登录 | 注册 方可回帖
返回
//