C++實現單例模式

無鞋童鞋發表於2017-08-01

  本篇博文我們來簡單學習一下設計模式中最簡單的一個模式——單例模式。單例模式我們將建構函式設計成私有化,因此無法通過建構函式例項化,唯一的方法就是通過呼叫靜態函式GetInstance。此外,我們建立一個靜態該類的指標,並且僅在靜態函式中例項化一次。整個過程的實現就可以讓無論多少次呼叫,類物件僅會構建一個。
  它的優勢主要以下幾個方面:
  ① 控制資源的使用,通過執行緒同步來控制資源的併發訪問;
  ② 控制例項產生的數量,達到節約資源的目的;
  ③ 作為通訊媒介使用,也就是資料共享,它可以在不建立直接關聯的條件下,讓多個不相關的執行緒或者程式之間實現通訊。
  比如資料庫連線池的設計一般採用單例模式,資料庫連線是一種資料庫資源。
  單例模式相對比較簡單,我們直接看下面的C++程式:

class Singleton
{
public:
    ~Singleton()
    {
        if (singleton != nullptr)
        {
            delete singleton;
            singleton = nullptr;
        }

    }
    static Singleton* GetInstance()   // 唯一介面來例項化類物件
    {
        if (singleton == nullptr)
            singleton = new Singleton();// 僅會例項化一個物件

        return singleton;
    }
private:
    static Singleton* singleton; // 靜態類物件,類外需要初始化
    Singleton()                  // 私有建構函式
    {
    }
};

Singleton* Singleton::singleton = nullptr; // 類外初始化

int main()
{
    Singleton* item1 = Singleton::GetInstance();
    Singleton* item2 = Singleton::GetInstance();

    return 0;
}

  以上是個人學習記錄,由於能力和時間有限,如果有錯誤望讀者糾正,謝謝!
  轉載請註明出處:http://blog.csdn.net/FX677588/article/details/76563255

相關文章