延迟初始化引用 - 初始化的内容是什么?

时间:2014-07-02 12:03:46

标签: c++ reference

我有一个类,我希望在稍后的程序初始化时进行实例化。在那之前我绝对不希望那个类的任何实例。我希望这个实例在全球范围内可用。

最简单的方法是拥有一个全局变量,它是对该类的引用,这很容易 - 只需在实例化类之后立即分配引用。除非我需要用某些填充该引用,直到那时,或者我将声明为引用但未初始化,我宁愿不创建虚拟实例类。

让它运作的正确方法是什么?

    configClass&  global_config;   // = ?


    init()
    {
       //... other prerequisites for loading the config
       static configClass _cfg(CONFIG_FILE,other_params);
       global_config = _cfg;
       //more code, using global_config
    }

2 个答案:

答案 0 :(得分:6)

这就是指针的用武之地 将其设置为nullptr,直到它指向存在的内容。

或者,或者,调查boost::optional

更好的是,完全废除这种全球性 您可以已经查看代码中出现的问题/混乱!

答案 1 :(得分:0)

取决于配置类的需求,一个选项可能是configClass包含自己的init()方法。然后,您可以立即(根据语言要求)初始化引用,并在问题中的global_config.init();方法中调用init()