1
12
按照初始化的顺序,读取答案 here . 关于如何解决初始化问题,可以将全局强制为函数中的静态局部变量。标准保证静态局部变量将在对函数的第一次调用中初始化:
然后您的其他全局变量将访问变量,如下所示:
注意,这通常不被认为是一个好的设计,而且即使这样解决了初始化问题,也不能解决定稿的顺序,因此应该注意不要在单件被销毁后访问它。 |
2
33
全局变量 在单个翻译单元中 (源文件)按定义顺序初始化。 不同翻译单元中全局变量的初始化顺序未指定。
正确的。
是的,如果
一个选项是有一个指向全局实例的静态指针;这样的指针将在任何动态初始化发生之前初始化为空;
|
3
1
您是正确的,未定义翻译单元之间全局的初始化。可以使用 singleton pattern . 但是,请注意,这种设计模式经常被误用。还要注意,如果析构函数中有依赖项,全局的顺序或破坏也是未定义的。 |
4
1
为全局提供正确初始顺序的最可靠方法… 1)初始化顺序取决于传递给链接器的对象文件顺序。直的还是反的-没关系。您可以创建测试应用程序来检测它。
2)使用适当的公用设施(
3)构建依赖关系图,对对象文件进行排序,并构建正确链接所需的顺序。如果存在,手动解决周期。 我在Linux上的makefiles中使用了这样的过程。它起作用了… |
5
0
C++缺乏任何类似的东西
Ada's
|
6
0
让静态全局变量成为初始化为nullptr的指针怎么样?然后,在另一个全局对象尝试使用该对象之前,检查其创建情况,并根据需要创建。这对我来说很有用,因为我创建了一个类创建者的全局注册表,在这里可以添加新的类,而不需要更改处理注册表的文件。 即
它在Visual Studio 2015中编译并与VC++一起工作。 我以前试过用这个
但是,在尝试向映射中插入一个条目之前,如果在工厂逻辑的独立编译单元中处理类的注册,那么在没有创建表时,我仍然会抛出异常。 |
7
0
重要的是要在这条规则中添加注释,即仅仅声明并不定义顺序:
或作为静态成员
|
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |