91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
云和县| 乌海市| 札达县| 井研县| 榆树市| 平顺县| 乌什县| 特克斯县| 虎林市| 岳阳市| 丹东市| 张掖市| 广宁县| 乌海市| 东平县| 临汾市| 北海市| 华宁县| 仲巴县| 敖汉旗| 荆州市| 饶阳县| 舟山市| 西林县| 望城县| 沙洋县| 康马县| 信宜市| 平武县| 施甸县| 三原县| 利津县| 汉寿县| 浮山县| 库车县| 定南县| 招远市| 新巴尔虎右旗| 新密市| 类乌齐县| 确山县|