#include <iostream>
#include <mutex>
using namespace std;
#if 0
//懒汉,不安全,不是放new对象
class Singleton
{
Singleton(){}
static Singleton * instance;
public:
static Singleton* getInstance()
{
if(instance == NULL)
instance = new Singleton;
return instance;
}
};
Singleton* Singleton::instance = NULL;
//饿汉,不安全,不是放new对象
class Singleton
{
Singleton(){}
static Singleton * instance;
public:
static Singleton* getInstance()
{
if(instance == NULL)
instance = new Singleton;
return instance;
}
};
Singleton* Singleton::instance = new Singleton;
#endif
//懒汉,线程安全,释放放new对象
class Singleton
{
Singleton(){}
static Singleton * instance;
static mutex m_mutex;
class CGarbo{
public:
~CGarbo(){
if(Singleton::instance != NULL)
delete instance;
}
};
static CGarbo Garbo;
public:
static Singleton* getInstance()
{
if(instance == NULL)
{
lock_guard<mutex> lg(m_mutex);
instance = new Singleton;
}
return instance;
}
};
Singleton* Singleton::instance = NULL;
mutex Singleton::m_mutex;
Singleton::CGarbo Singleton::Garbo;
单例 C++各种实现
最新推荐文章于 2024-07-21 17:29:49 发布