我有一些代码,其中一个全局资源必须设置相当多的代码:
globalClass foo; // global variable / object; give it a memory space to live
void doSomething( void )
{
foo.bar(); // use the global foo object
}
int main( int argc, const char *argv[] )
{
foo( argc ); // foo can only be instantiated in main as it's using
// information that's only available here
doSomething(); // use the global foo object
return 0;
}
正如您所看到的,foo
是全局作用域--但是要调用它的构造函数,我需要一些只有在main
内部才能得到的信息。
我如何才能做到
我能想到的唯一解决方案是将foo
设置为指向globalClass
的指针--但这会导致每次使用foo
时指针解引用。
PS:在真实的的程序中,main
和doSomething
会存在于不同的文件中,当然可以保证foo
在示例化之前不会被访问。
4条答案
按热度按时间gv8xihay1#
把
foo
作为函数中的static
变量怎么样?这样,它只在函数被调用时才被示例化:ie3xauqp2#
像你提到的那样使用指针是最简单和最干净的事情。指针解引用的开销并不是很大。我建议你使用这个方法,除非你已经证明了开销是明显的。
第二个选择是将
globalClass
的构造和初始化分离成两个独立的方法,构造函数只做不需要外部信息的最简单的事情,然后调用init(argc)
或main
内部的任何东西来合并外部信息。您也可以使用赋值来初始化foo,例如:
这实际上是使用临时变量进行初始化,然后复制结果。
lpwwtiir3#
这里有一个非常可怕的黑客,如果你不想间接和不介意自己做清理:
crcmnpdw4#
你可以这样做: