溫馨提示×

c++單例模式的實現方法有哪些

c++
小億
94
2024-01-05 01:39:35
欄目: 編程語言

在C++中,有幾種常見的實現單例模式的方法:

  1. 餓漢式單例模式:在程序啟動時就創建單例對象,并提供一個公共的訪問方法。這種方法的缺點是在程序啟動時就創建對象,可能會影響程序的啟動速度。
class Singleton {
private:
    static Singleton* instance;
    Singleton() {}

public:
    static Singleton* getInstance() {
        if (instance == nullptr) {
            instance = new Singleton();
        }
        return instance;
    }
};

Singleton* Singleton::instance = nullptr;
  1. 懶漢式單例模式:在第一次使用時才創建單例對象。這種方法的缺點是需要使用額外的線程同步機制來保證多線程環境下的安全性。
class Singleton {
private:
    static Singleton* instance;
    Singleton() {}

public:
    static Singleton* getInstance() {
        if (instance == nullptr) {
            instance = new Singleton();
        }
        return instance;
    }
};

Singleton* Singleton::instance = nullptr;
  1. 雙重檢查鎖單例模式:在懶漢式單例模式的基礎上加入了雙重檢查,在多線程環境下保證安全性并減少鎖的使用次數。
class Singleton {
private:
    static Singleton* instance;
    static std::mutex mtx;
    Singleton() {}

public:
    static Singleton* getInstance() {
        if (instance == nullptr) {
            std::lock_guard<std::mutex> lock(mtx);
            if (instance == nullptr) {
                instance = new Singleton();
            }
        }
        return instance;
    }
};

Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mtx;
  1. 靜態局部變量單例模式:利用C++的靜態局部變量特性,在需要時創建單例對象,并確保多線程安全。
class Singleton {
private:
    Singleton() {}

public:
    static Singleton* getInstance() {
        static Singleton instance;
        return &instance;
    }
};

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女