gpt4 book ai didi

c++ - 可以从静态函数调用构造函数吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:45:55 26 4
gpt4 key购买 nike

如果这个问题之前有人问过,我很抱歉(我试图找到它但徒劳无功)。我在 http://sourcemaking.com/design_patterns/singleton/cpp/1 浏览了 Singleton 设计模式(代码是从那里复制的)

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();
}

我的问题在行中 如果(!s_instance) s_instance = new GlobalClass;

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

谢谢!

最佳答案

您可以从任何地方调用构造函数。如果您不能在没有实例的情况下调用构造函数,您将如何首先获得任何实例?

您可能无数次从普通函数中调用过它们。静态函数也不异常(exception)。

关于c++ - 可以从静态函数调用构造函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5855046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com