溫馨提示×

c++單例模式怎么寫

c++
小億
94
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
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女