C++中类的全局实例

Ale*_*nor 9 c++ singleton

正如标题所说.我如何创建一个全局可用的类的实例(例如,我有一个打印的仿函数,我希望有一个这样的全局实例(虽然可以创建更多)).

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.如果您需要制作更多,可以使用构造函数进行调用.

  • 如果我确实喜欢 MyClass = MyClass() 会发生什么? (2认同)

Mar*_*ork 5

首先,您想要全局变量是一种“代码味道”(正如 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)

  • 根据这个逻辑,std::cout 也是一种代码味道。 (6认同)
  • 我不确定单例不好的原因与我对“std::cout”的观察有什么关系。`std::cout` 到底好不好?如果不坏的话,为什么呢?(注 - 我认为这还不错,因为如果是的话,人们就会想出不同的东西。) (3认同)