Singleton Pattern
使用单例的意图
- 确保一个类只有一个实例
使用场景
- 在多个客户端会话中共享同一个类的某个实例
- 使某个类只有一个实例对象,或有限个实例对象
好处或缺点
- 需要确保多线程对单例对象的访问同步
示例代码
////Singleton.h
#pragma once
#include <mutex>
class Singleton
{
public:
Singleton* Instance();
protected:
Singleton();
private:
static std::mutex m_mutex;
static Singleton * instance;
};
////Singleton.cpp
#include "Singleton.h"
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::m_mutex;
Singleton * Singleton::Instance()
{
if (this->instance == nullptr)
{
m_mutex.lock();
if(this->instance == nullptr)
this->instance = new Singleton;
m_mutex.unlock();
}
return this->instance;
}
Singleton::Singleton()
{
}
注意点:所谓的线程安全只能保证同时最多有一个实例,但是不同的线程可以同时访问这同一个实例,所以还需要确保线程访问的同步问题