延迟初始化要初始化的对象

Delay initializing a what to initialize with?

本文关键字:初始化 对象 延迟      更新时间:2023-10-16

我有一个类,我希望在稍后程序初始化时实例化它。在此之前,我绝对不想要这个类的任何实例。我希望这个实例在全局范围内可用。

最简单的方法是使用一个全局变量作为该类的引用,这很简单——只需在类实例化之后赋值引用即可。除非在此之前我需要用填充引用,或者我将声明为引用但未初始化,并且我宁愿不创建所述类的虚拟实例。

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

    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
    }

这就是指针的作用。
设置1为nullptr,直到它指向某个存在的对象。

或者,研究boost::optional

更好的是,完全取消这个全局变量。
你已经可以看到它在你的代码中造成的问题/混乱!

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