静态变量生命周期,文件范围与函数范围
Static variable lifetimes, file-scope vs. function scope
假设我有一个 .cpp
文件:
static Foo aFoo;
Foo& staticFoo(){
return aFoo;
}
Foo& singletonFoo(){ // not thread safe in c++-03
static Foo staticFoo;
return staticFoo;
}
和公开这些功能的 .h
文件(但不直接 aFoo
)。
- 我确定
aFoo
在 staticFoo
之前初始化了吗?
- 我确定
staticFoo
在 aFoo
之后被销毁了吗?
- 我确定
aFoo
在任何自动存储期限后被销毁
我程序中的变量?
- 没有。如果有人在静态初始化期间从另一个翻译单元调用
singletonFoo
那么它是未指定的。
- 否,因为破坏的顺序与构建的顺序相反,我们已经确定不能保证构建。
aFoo
会在所有local/automatic个变量后被销毁。
假设我有一个 .cpp
文件:
static Foo aFoo;
Foo& staticFoo(){
return aFoo;
}
Foo& singletonFoo(){ // not thread safe in c++-03
static Foo staticFoo;
return staticFoo;
}
和公开这些功能的 .h
文件(但不直接 aFoo
)。
- 我确定
aFoo
在staticFoo
之前初始化了吗? - 我确定
staticFoo
在aFoo
之后被销毁了吗? - 我确定
aFoo
在任何自动存储期限后被销毁 我程序中的变量?
- 没有。如果有人在静态初始化期间从另一个翻译单元调用
singletonFoo
那么它是未指定的。 - 否,因为破坏的顺序与构建的顺序相反,我们已经确定不能保证构建。
aFoo
会在所有local/automatic个变量后被销毁。