1. 程式人生 > 實用技巧 >C++單例模式實現再回顧

C++單例模式實現再回顧

單例模式需要注意的問題:

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;

    static
singleton * 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(); } return
m_instance; } void singleton::Release(){ delete m_instance; }