首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 單例模式深度解析:唯一實例的含義與程式碼範例

     編輯:程式設計綜合問答

「唯一實例」在 C++ 中通常指單例模式,意即某個類別在整個程式生命週期中僅能存在一個實例物件,並提供全域存取點。這在管理共享資源(如資料庫連線池、日誌系統、設定管理器)時極為常見。

核心實作要素

  1. 私有化建構子、複製建構子、指派運算子,防止外部建立實例。
  2. 提供靜態公開方法(如 getInstance())回傳唯一實例參考。
  3. 實例通常以靜態區域變數儲存於函式內,利用 C++11 執行緒安全的區域靜態初始化特性(Meyers' Singleton)。

標準範例程式碼

class Singleton {
private:
    Singleton() = default;
    ~Singleton() = default;
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

public:
    static Singleton& getInstance() {
        static Singleton instance; // C++11 保證執行緒安全
        return instance;
    }
    void doSomething() { /* 業務邏輯 */ }
};

// 使用方式
int main() {
    Singleton::getInstance().doSomething();
    return 0;
}

經典案例:MFC 的 theApp 物件

MFC 應用程式類別 CWinApp 的全域實例 theApp 即為單例,代表整個應用程式的唯一控制核心,管理初始化、訊息迴圈與資源清理。

注意事項

  • 避免濫用單例,否則會增加耦合度、難以單元測試。
  • 多執行緒環境下確保初始化安全(C++11 後區域靜態變數已內建保護)。
  • 若需延遲初始化或處理複雜相依,可考慮雙重檢查鎖定或 std::call_once。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved