可以从静态函数中调用构造函数吗?

Ano*_*non 3 c++ static constructor

如果以前有人问过这个问题,我很抱歉(我试图找到它但徒劳)。我正在http://sourcemaking.com/design_patterns/singleton/cpp/1上查看单例设计模式(代码是从那里复制的)

class GlobalClass
{
    int m_value;
    static GlobalClass *s_instance;
    GlobalClass(int v = 0)
    {
        m_value = v;
    }
  public:
    int get_value()
    {
        return m_value;
    }
    void set_value(int v)
    {
        m_value = v;
    }
    static GlobalClass *instance()
    {
        if (!s_instance)
          s_instance = new GlobalClass;
        return s_instance;
    }
};

// Allocating and initializing GlobalClass's
// static data member.  The pointer is being
// allocated - not the object inself.
GlobalClass *GlobalClass::s_instance = 0;

void foo(void)
{
  GlobalClass::instance()->set_value(1);
  cout << "foo: global_ptr is " << GlobalClass::instance()->get_value() << '\n';
}

void bar(void)
{
  GlobalClass::instance()->set_value(2);
  cout << "bar: global_ptr is " << GlobalClass::instance()->get_value() << '\n';
}

int main()
{
  cout << "main: global_ptr is " << GlobalClass::instance()->get_value() << '\n';
  foo();
  bar();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是 if (!s_instance) s_instance = new GlobalClass; 行

s_instance = new GlobalClass 将调用构造函数,但构造函数是非静态的,我们从静态函数调用它。这是如何运作的?构造函数在这方面是否“特殊”?

谢谢!

Mat*_*nen 5

您可以从任何地方调用构造函数。如果没有实例就无法调用构造函数,那么首先如何获取实例?

您可能已经无数次从普通函数中调用它们。静态函数也不例外。