中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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

c++
小億
76
2023-10-31 12:08:04
欄目: 編程語言

在C++中,可以通過以下幾種方式來實現單例模式:

  1. 餓漢式單例模式(Eager Initialization): 在類定義中靜態地創建一個單例對象,保證了在程序運行期間只會創建一個實例。這種方式的缺點是無法進行延遲加載,即使程序不需要使用該單例對象也會被創建。
class Singleton {
private:
    static Singleton* instance;
    Singleton() {}

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

Singleton* Singleton::instance = nullptr;
  1. 懶漢式單例模式(Lazy Initialization): 在第一次使用該單例對象時才創建實例。這種方式可以實現延遲加載,但需要考慮線程安全問題。
class Singleton {
private:
    static Singleton* instance;
    Singleton() {}

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

Singleton* Singleton::instance = nullptr;
  1. 雙重檢查鎖定(Double-checked Locking): 在懶漢式的基礎上增加了同步鎖,解決了線程安全問題,同時也保持了延遲加載的特性。
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. 靜態局部變量(Local Static): 利用局部靜態變量的特性,可以在函數內部定義一個靜態局部變量,保證了只有在第一次調用該函數時才實例化單例對象。這種方式也是線程安全的。
class Singleton {
private:
    Singleton() {}

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

這些是常見的幾種單例模式的實現方式,選擇哪種方式取決于具體的需求和場景。

0
铜鼓县| 麦盖提县| 礼泉县| 榆林市| 阜城县| 临西县| 阿合奇县| 根河市| 太原市| 芦山县| 闽侯县| 南郑县| 武宁县| 蕉岭县| 孝义市| 徐汇区| 兴安县| 双桥区| 那坡县| 吴旗县| 遵义市| 鹤庆县| 长顺县| 遂宁市| 泸定县| 杂多县| 茶陵县| 莱州市| 清镇市| 安乡县| 忻州市| 会宁县| 白银市| 雷州市| 靖边县| 江永县| 剑川县| 金寨县| 普安县| 营口市| 土默特左旗|