我在 Visual Studio 2015 sp3 中使用 C++。 由
#pragma init_seg(compiler)
,我先初始化一些静态变量(用于内存管理)。 https://msdn.microsoft.com/en-us/library/7977wcck.aspx
但是,有
#pragma init_seg(compiler)
在 wcerr.cpp(Microsoft Visual Studio 14.0\VC\crt\src\STL\wcerr.cpp) 中,所以这些对象在我的对象之前初始化。
我可以通过任何编译/链接选项强制我的对象在 wcerr.cpp
对象之前先初始化吗?
最佳答案
其中一种解决方案是尝试将静态变量包装到静态函数中:
static type& My_static_obj() {
static type my_static_obj_;
return my_static_obj_;
}
它看起来像一个简单的 Singleton 类型,并调用 Construct On First Use Idiom。由于标准(C++11 及更高版本),它保证被初始化一次(甚至是原子的!),并且在它的 c-tor 内部,这样一个对象可以访问其他“静态”变量,所以,如果没有循环变量之间的依赖关系,初始化的顺序会被严格定义。
更多信息见this question以及这个Construct On First Use Idiom的其他描述。
关于c++ - 我可以更改 C++ 中的静态变量初始化顺序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41055345/