我有一个类,我希望在稍后的程序初始化时进行实例化。在那之前我绝对不希望那个类的任何实例。我希望这个实例在全球范围内可用。
最简单的方法是拥有一个全局变量,它是对该类的引用,这很容易 - 只需在实例化类之后立即分配引用。除非我需要用某些填充该引用,直到那时,或者我将声明为引用但未初始化,我宁愿不创建虚拟实例类。
让它运作的正确方法是什么?
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
}
答案 0 :(得分:6)
这就是指针的用武之地
将其设置为nullptr
,直到它指向存在的内容。
或者,或者,调查boost::optional
。
更好的是,完全废除这种全球性 您可以已经查看代码中出现的问题/混乱!
答案 1 :(得分:0)
取决于配置类的需求,一个选项可能是configClass
包含自己的init()
方法。然后,您可以立即(根据语言要求)初始化引用,并在问题中的global_config.init();
方法中调用init()
。