c++ - 我可以更改 C++ 中的静态变量初始化顺序吗?

标签 c++ visual-studio visual-studio-2015 pragma static-variables

我在 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/

相关文章:

c# - 如何使 Visual Studios 2012 在键入 "}"后立即添加 "{"

c++ - ReSharper C++ 代码分析不起作用

gulp - 使用 Visual Studio 2015 发布 Gulp 目标文件

c++ - 为什么这个例子只适用于断点

c# - Visual Studio 2010 —选择的解决方案配置会影响批量生成的输出

c++:如何在utf8中支持代理字符

visual-studio - 在 Visual Studio Community 2015 中使用 Emacs 绑定(bind)

visual-studio-2015 - 如何在 VS 2015 中获取 xunit.net 的 ExcelData 属性?

c++ - 检测表单中任何小部件的状态是否已更改

c++ - 尝试使用 EvtSetChannelConfigProperty() 函数更新最大事件日志文件大小时插入了错误值