81得票6回答
C++静态初始化顺序

在C++中使用静态变量时,通常会想要通过将一个变量传递给其构造函数来初始化另一个变量。换句话说,我想创建依赖于彼此的静态实例。 在单个.cpp或.h文件中,这不是问题:实例将按照声明的顺序创建。然而,当您想要使用另一个编译单元中的实例初始化静态实例时,似乎无法指定顺序。结果就是,取决于天气,...

71得票12回答
寻找C++静态初始化顺序问题

我们遇到了静态初始化顺序惊异的一些问题,我正在寻找一种方法来检查大量代码中可能出现的情况。有没有关于如何高效地做到这一点的建议? 编辑:我得到了一些解决静态初始化顺序问题的好答案,但那不是我的问题。我想知道如何找到受此问题影响的对象。 Evan的回答似乎是目前为止在这方面最好的答案;我认为我...

27得票4回答
静态初始化顺序混乱问题

我在一本书中阅读关于SIOF的知识,它举了一个例子://file1.cpp extern int y; int x=y+1; //file2.cpp extern int x; int y=x+1; 现在我的问题是: 在上面的代码中,以下事情会发生吗? 编译 file1.cpp 时,...

17得票2回答
Nifty/Schwarz 计数器,是否符合标准?

今天早上,我和同事讨论了静态变量初始化顺序的问题。他提到了 Nifty/Schwarz 计数器,我有点困惑。我知道它是如何工作的,但我不确定它是否符合标准。 假设有以下3个文件(前两个是从More C++ Idioms复制的): //Stream.hpp class StreamIni...

14得票4回答
防止C++中静态初始化顺序的“惨案”

我曾经阅读过一篇很棒的C++ FAQ(真的非常好!!),并阅读了有关如何防止静态初始化顺序“大灾难”的主题。因此,作者建议将静态变量封装到函数中,从而通过维护变量创建顺序来防止“大灾难”。但这对我来说似乎是一个粗暴的解决方法。那么我的问题是,是否存在现代的、更加模式化的方法来防止这种“大灾难”...

13得票2回答
在静态库中初始化嵌入的Qt资源

我有一个问题:我需要在独立的静态库中创建小部件(widget),然后将其与最终应用程序(Visual C++ 9.0, Qt 4.5)链接。这个静态小部件库包含一些资源(图标),并由几个.cpp文件组成(每个文件包含一个独立的小部件)。据我所知,如果我在静态库中使用这些资源,我必须初始化Qt资...

12得票11回答
Java是否存在静态顺序初始化惨案?

最近这里有一个问题,其中包含了以下代码(类似于这个),用于实现无需同步的 singleton。public class Singleton { private Singleton() {} private static class SingletonHolder { ...

10得票5回答
静态初始化顺序混乱问题

在他的《C++编程思想》(第十章)中,Eckel描述了一种由Jerry Schwarz开创的技术来解决这个惨败问题。他说,如果我们想要将x初始化为100并将y初始化为200,并且在所有翻译单元之间共享它们,我们可以创建一个名为Initializer.h的文件,其内容如下:extern int ...

9得票1回答
std::thread::hardware_concurrency 和静态初始化

这个全局函数会受到静态初始化失败的影响吗? template <typename TFn> void ParallelFor(int iIni,int iFin,TFn Fn) { static const unsigned int NThread= std::thr...

7得票3回答
C++库中静态STL容器的双重初始化

这里有一些关于“静态初始化顺序混乱”的好问题和答案,但我似乎又遇到了另一个表达方式,特别丑陋,因为它不会崩溃,但会丢失和泄漏数据。 我有一个自定义的C++库和一个链接到它的应用程序。该库中有一个静态STL容器,用于注册类的所有实例。这些实例恰好是应用程序中的静态变量。 由于“混乱”(我相信...