Skip to content

Latest commit

 

History

History
28 lines (21 loc) · 978 Bytes

在C++中,三个全局变量相互依赖,程序应该如何初始化呢?300个呢?.md

File metadata and controls

28 lines (21 loc) · 978 Bytes

在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; }
    // ... 提供对其他资源的访问
};