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

溫馨提示×

c++單例模式怎么寫

c++
小億
89
2024-01-19 09:16:16
欄目: 編程語言

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

class Singleton {
private:
    // 私有構造函數,防止外部創建對象
    Singleton() {}

    // 靜態私有成員變量,用于保存單例對象
    static Singleton* instance;

public:
    // 靜態公有成員函數,用于獲取單例對象
    static Singleton* getInstance() {
        if (instance == nullptr) {
            instance = new Singleton();
        }
        return instance;
    }
};

// 初始化靜態成員變量
Singleton* Singleton::instance = nullptr;

在這個實現中,通過將構造函數設置為私有,可以防止外部直接創建對象。通過靜態成員變量和靜態成員函數,可以實現全局唯一的單例對象,并通過getInstance函數來獲取該對象。

需要注意的是,這個實現是簡單的懶漢式單例模式,只有在第一次調用getInstance函數時才會創建對象。如果需要線程安全,可以使用鎖來保證只有一個線程可以創建對象。

class Singleton {
private:
    // 私有構造函數,防止外部創建對象
    Singleton() {}

    // 靜態私有成員變量,用于保存單例對象
    static Singleton* instance;
    
    // 靜態私有成員變量,用于加鎖
    static std::mutex mtx;

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;

在這個實現中,使用了std::mutex來實現線程安全。在第一次調用getInstance時,使用std::lock_guardmtx加鎖,保證只有一個線程可以創建對象。

0
饶平县| 湘乡市| 永川市| 开阳县| 黔南| 翁源县| 青川县| 绍兴市| 东乌珠穆沁旗| 常山县| 嘉兴市| 蒙自县| 荆门市| 牙克石市| 手机| 清远市| 贵德县| 政和县| 石嘴山市| 绥芬河市| 嘉定区| 崇仁县| 农安县| 浦江县| 突泉县| 万荣县| 宜兰市| 玉树县| 纳雍县| 山丹县| 宜宾市| 上高县| 康平县| 米林县| 云霄县| 容城县| 工布江达县| 莱芜市| 拉萨市| 晋江市| 蓬安县|