C++學習隨筆——簡單的單例設計模式例項

北宸于烁發表於2024-08-26
點選檢視程式碼
#include <iostream>

class Singleton {
private:
    // 私有化建構函式,防止外部例項化
    Singleton() {
        std::cout << "Singleton Instance Created!" << std::endl;
    }

    // 刪除複製建構函式和賦值運算子,防止複製例項
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

public:
    // 提供一個全域性訪問點,返回唯一例項
    static Singleton& getInstance() {
        static Singleton instance;  // 靜態區域性變數,第一次呼叫時建立例項
        return instance;
    }

    void showMessage() {
        std::cout << "Hello from Singleton!" << std::endl;
    }
};

int main() {
    // 獲取Singleton的唯一例項並呼叫方法
    Singleton& singleton1 = Singleton::getInstance();
    singleton1.showMessage();

    // 再次獲取例項
    Singleton& singleton2 = Singleton::getInstance();

    // 檢查兩個例項是否相同
    if (&singleton1 == &singleton2) {
        std::cout << "singleton1 and singleton2 are the same instance." << std::endl;
    } else {
        std::cout << "singleton1 and singleton2 are different instances." << std::endl;
    }

    return 0;
}

單例設計模式與我之前學習的C++程式碼都有所不同:
1、為了防止外部隨意例項化物件,類的建構函式和解構函式採用了private訪問修飾符。
2、getInstance()方法中的靜態區域性變數instance在第一次呼叫時建立,並在程式的生命週期中存在。(C++11及以後的標準中保證執行緒安全的懶漢式單例模式
3、刪除了複製建構函式和operator=,防止使用者意外呼叫複製建構函式創造新的例項。

相關文章