GoF建立型模式——單例
阿新 • • 發佈:2019-02-06
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()
{
}
注意點:所謂的執行緒安全只能保證同時最多有一個例項,但是不同的執行緒可以同時訪問這同一個例項,所以還需要確保執行緒訪問的同步問題