static-order-fiasco

    9热度

    11回答

    这里最近的一个问题有下面的代码(很好,类似于这个)来实现没有同步的单例。 public class Singleton { private Singleton() {} private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton();

    17热度

    4回答

    我是从一本书阅读SIOF它举了一个例子: //file1.cpp extern int y; int x=y+1; //file2.cpp extern int x; int y=x+1; 现在我的问题是: 在上面的代码中,将下面的事情发生吗? 编译file1.cpp时,编译器会保留y,因为它不会为它分配存储空间。 编译器为x分配存储空间,但不初始化它。 编译file2.cpp时,

    2热度

    1回答

    所以我建立一个语法编译器ANTLR和一些生成的代码看起来是这样的: const int ExampleClass::EXAMPLEVAR = OtherExample::OTHEREXAMPLEVAR; 正如你可以看到这符合“静态变量初始化顺序的悲剧”的描述。 问题是,这个项目的目标之一是生成的C++代码可以用作进一步语法编译的基础,尽可能容易。 这就是为什么在这种情况下“首次使用构造”范式可

    2热度

    1回答

    我试图让对象转储打印静态C++对象的构建顺序。我发现-h为标题,但我似乎无法让objdump继续前进。 计划没有与init_priority $ objdump -h cryptest.exe cryptest.exe: file format elf64-x86-64 Sections: Idx Name Size VMA LMA File off Algn

    9热度

    2回答

    我有下一种情况:我需要在独立静态库中创建小部件,然后将它与最终应用程序(visual C++ 9.0,qt 4.5)链接。 这个静态小部件库包含一些资源(图标),并由几个.cpp文件(每个包含独立小部件)组成。据我所知,我必须初始化qt资源系统,如果我在静态库中使用它们(资源),并调用“Q_INIT_RESOURCE(resource_file_name)”。我解决了这个用下面的代码(在静态库中的

    3热度

    2回答

    我目前正在学习C++,并且遇到一些麻烦。 我开发了一个程序,使用大量的#define,但我想用static const代替(碰撞/类型/范围...)。 所以,我现在有这样的: file1.hpp class A { public: static const std::string MY_CONST_VAR; }; file1.cpp const std::string A

    4热度

    1回答

    根据C++ 11规格: 包括<iostream>在翻译单元应为如果<iostream>具有静态存储定义的ios_base::Init一个实例的结果持续时间。同样,整个程序应表现为,如果有至少 一个具有静态存储持续时间ios_base::Init实例 这意味着,如果我的代码看起来像这样: // A.cpp #include <iostream> using namespace std; uns

    7热度

    3回答

    一旦我正在阅读一个非常棒的C++常见问题解答(它真的很棒!! https://isocpp.org/faq)并阅读了有关如何防止静态初始化顺序“失败”的主题。所以作者建议将静态变量包含到函数中,从而通过维护变量的创建顺序来防止“失败”。但这在我看来似乎是一个粗鲁的解决方法。所以我的问题是,是否有任何现代的,更模式化的方式来防止这种“惨败”,而是将“静态的东西”封装到函数中?

    6热度

    2回答

    比方说,我们有两个编译单元如下: // a.cpp extern int value2; int value1 = value2 + 10; // b.cpp extern int value1; int value2 = value1 + 10; 当我试图在VC2010,它初始化value1和value2第一为零。是不是都动态初始化value1和value2并且默认初始化不适用于

    6热度

    3回答

    静态STL容器的双初始化周围有“静态变量初始化顺序的悲剧”了几个很好的问题和答案在这里,但我似乎已经撞到它的另一个表现,特别难看,因为它不会崩溃但会泄漏并泄露数据。 我有一个自定义C++库和一个链接它的应用程序。库中有一个静态STL容器,用于注册一个类的所有实例。这些实例恰好是应用程序中的静态变量。由于“惨败”(我相信),我们在应用程序初始化过程中让容器充满应用程序实例,然后库进行初始化并重置容器