1 Star 0 Fork 0

huyi / TechCPP

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
在C++中,三个全局变量相互依赖,程序应该如何初始化呢?300个呢?.md 978 Bytes
一键复制 编辑 原始数据 按行查看 历史
葛昆仑 提交于 2024-01-16 22:43 . update: 2 articles

在C++中,如果有多个全局变量相互依赖,初始化顺序可能会导致问题,因为全局变量的初始化顺序在不同编译单元之间是未定义的。这意味着,如果一个全局变量依赖于另一个尚未初始化的全局变量,那么程序可能会出现运行时错误。

我们可以利用构造函数中的初始化技巧,确保每个变量首次访问的时候进行初始化,像这样,并且在变量多的时候去利用单例模式去控制他们的初始化顺序:

class GlobalResources {
private:
    A a;
    B b; // 假设B依赖A
    C c; // 假设C依赖A和B
    // ... 其他依赖项

    GlobalResources() : a(), b(a), c(a, b) /* etc. */ {}

public:
    static GlobalResources& instance() {
        static GlobalResources instance;
        return instance;
    }

    A& getA() { return a; }
    B& getB() { return b; }
    C& getC() { return c; }
    // ... 提供对其他资源的访问
};
1
https://gitee.com/hylhm/TechCPP.git
git@gitee.com:hylhm/TechCPP.git
hylhm
TechCPP
TechCPP
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891