正如标题所说.我如何创建一个全局可用的类的实例(例如,我有一个打印的仿函数,我希望有一个这样的全局实例(虽然可以创建更多)).
Gre*_*ill 18
使用通常的模式制作单个对象的所有努力都没有解决问题的第二部分 - 如果需要可以制作更多的东西.单身"模式"是非常严格的,并且不仅仅是另一个名称的全局变量.
// myclass.h
class MyClass {
public:
MyClass();
void foo();
// ...
};
extern MyClass g_MyClassInstance;
// myclass.cpp
MyClass g_MyClassInstance;
MyClass::MyClass()
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
现在,在任何其他模块中只需像往常一样包含myclass.h和使用g_MyClassInstance.如果您需要制作更多,可以使用构造函数进行调用.
首先,您想要全局变量是一种“代码味道”(正如 Per Martin Fowler 所说)。
但为了达到您想要的效果,您可以使用单例的变体。
使用静态函数变量。这意味着变量在使用之前不会被创建(这给了你惰性求值),并且所有变量都将以与创建相反的顺序被销毁(因此这保证了析构函数将被使用)。
class MyVar
{
public:
static MyVar& getGlobal1()
{
static MyVar global1;
return global1;
}
static MyVar& getGlobal2()
{
static MyVar global2;
return global2;
}
// .. etc
}
Run Code Online (Sandbox Code Playgroud)