亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

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
四子王旗| 自治县| 澄江县| 威信县| 甘南县| 淮南市| 满洲里市| 西城区| 洛扎县| 育儿| 庆城县| 关岭| 怀远县| 永德县| 东山县| 灵武市| 监利县| 海原县| 周宁县| 岳池县| 灵台县| 虹口区| 毕节市| 咸阳市| 吐鲁番市| 河间市| 临汾市| 股票| 民乐县| 萨嘎县| 沙洋县| 亳州市| 广灵县| 留坝县| 鄂托克旗| 承德市| 咸阳市| 平乐县| 泗洪县| 砚山县| 双鸭山市|