静态变量生命周期,文件范围与功能范围

时间:2015-02-24 16:24:02

标签: c++ static g++

假设我有一个.cpp文件:

static Foo aFoo;

Foo& staticFoo(){
    return aFoo; 
}

Foo& singletonFoo(){ // not thread safe in c++-03
    static Foo staticFoo;
    return staticFoo;
}

.h文件公开这些函数(但不直接aFoo)。

  1. 我确定在aFoo
  2. 之前初始化了staticFoo
  3. 我确定在staticFoo之后aFoo被销毁了吗?
  4. 我确定aFoo在任何自动存储持续时间后都会被销毁 我的程序中的变量?

1 个答案:

答案 0 :(得分:2)

  1. 否。如果有人在静态初始化期间从另一个翻译单元调用singletonFoo,那么它是未指定的。
  2. 不,因为破坏是按照相反的施工顺序发生的,我们已经确定不能保证施工。
  3. 在所有本地/自动变量之后,
  4. aFoo将被销毁。