C++單例模式實現再回顧
阿新 • • 發佈:2020-08-18
單例模式需要注意的問題:
1、static例項保證只有一個例項
2、需要C++類外初始化例項、執行緒鎖等
3、私化建構函式,關閉賦值運算子=和拷貝建構函式
4、應當有Releas函式
5、應該考慮執行緒安全問題
下面是懶漢模式的實現:
#include <thread> #include <mutex> class singleton { private: singleton() = default; public: static singleton * m_instance; static std::mutex mu; staticsingleton * GetInstance(); void Print(); void Release(); singleton & operator=(const singleton & pinstance) = delete; singleton(const singleton & pinstance) = delete; ~ singleton(); };
#include "single.h" #include <iostream> using namespace std; singleton* singleton::m_instance=nullptr; std::mutex singleton::mu;void singleton::Print(){ std::cout<<" It's a singleton"<<std::endl; } singleton* singleton::GetInstance(){ if (m_instance==nullptr) { mu.lock(); if (m_instance==nullptr) { m_instance=new singleton(); } mu.unlock(); } returnm_instance; } void singleton::Release(){ delete m_instance; }