gpt4 book ai didi

c++ - 单例类的具体使用和实现是什么?

转载 作者:行者123 更新时间:2023-11-27 22:58:17 26 4
gpt4 key购买 nike

我知道单例类不允许创建多个对象。但是根据我下面的代码,我可以创建尽可能多的对象。

class Singleton
{
private :
static Singleton *m_Instance;
Singleton()
{
cout<<"In defailt constructor"<<endl;
}
Singleton(int x)
{
i = x;
cout<<"in param const"<<endl;
}
public:
static int i;
static Singleton* createInstance()
{
if(!m_Instance)
m_Instance = new Singleton(20);
Singleton sing;
return m_Instance;
}
};
int Singleton::i=0;
Singleton* Singleton::m_Instance = NULL;
int main()
{

Singleton *pt = Singleton::createInstance();
return 1;
}

在这里我可以在静态函数中创建一个对象(因为我可以在类中访问构造函数)那么 Single object 的概念在哪里?

最佳答案

这不是单例,原因很简单,你故意写了一些不是单例的东西。

我们的想法是,您编写 instance 函数,这样它只会创建一个实例,而编写其他成员,这样它们就不会创建任何实例。然后,由于它们是唯一可以创建任何实例的函数,因此只会有一个。

如果您删除狡猾的 Singleton sing;,那么您将拥有一个单例实现 - 只有一个实例将被创建,这是第一次有人调用该函数时。

与在 C++ 中实现此反模式的所有尝试一样,存在问题:对象永远不会被销毁,并且初始化不是线程安全的。还有各种其他方法,每种方法都有自己的缺点。我建议您完全避免使用全局变量,无论您是否将它们打扮成单例或其他反模式。

关于c++ - 单例类的具体使用和实现是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30370892/

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