我试图找到一种确保静态变量的构造和销毁顺序的好方法。据我所知,静态变量的构造和销毁方式如下:
如果静态变量在不同的文件中被定义为全局空间,那么它们的构造顺序是无法保证的。
但是,如果在函数中定义了静态变量,则在第一次执行达到其声明时构造局部静态变量。
基于上面的规则,我写了下面的c++代码来确保静态变量b总是在静态变量之前被破坏a,在我的实验中保证了构造顺序和破坏顺序:
在档案啊
class A {
public:
SomeClass* GetStatic() {
static SomeClass a;
return &a;
}
}
Run Code Online (Sandbox Code Playgroud)
在文件 Bh 中:
#include "A.h"
class B {
public:
AnotherClass* GetStatic() {
A::GetStatic(); // a dummy call to force the static local variable in
// A::GetStatic() get initialized before the b.
static AnotherClass b;
return &b;
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我A::GetStatic();在static AnotherClass b;. 如果规则 3 成立,这确保a在 之前初始化b。并且由于规则 1,可以保证b在 之前被破坏a。
我的问题是:
我还查看了isocpp.org 网站以了解确保静态变量的构造和销毁顺序的最佳方法,但该部分仍标记为 TODO: WRITE THIS UP。
| 归档时间: |
|
| 查看次数: |
1678 次 |
| 最近记录: |