c++單例模式的代碼怎么寫

c++
小億
95
2023-10-25 19:45:31
欄目: 編程語言

下面是一個(gè)簡(jiǎn)單的C++單例模式的代碼示例:

class Singleton {
private:
    static Singleton* instance;
    Singleton() {} // 將構(gòu)造函數(shù)設(shè)為私有,防止外部創(chuàng)建對(duì)象

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

Singleton* Singleton::instance = nullptr; // 靜態(tài)成員變量需要在類外初始化

int main() {
    Singleton* obj1 = Singleton::getInstance();
    Singleton* obj2 = Singleton::getInstance();

    // obj1和obj2是同一個(gè)對(duì)象
    if (obj1 == obj2) {
        std::cout << "obj1 and obj2 are the same instance." << std::endl;
    }

    return 0;
}

在這個(gè)例子中,Singleton類只有一個(gè)私有的靜態(tài)成員變量instance和一個(gè)公有的靜態(tài)成員函數(shù)getInstance。靜態(tài)成員變量instance用于存儲(chǔ)唯一的實(shí)例對(duì)象。getInstance函數(shù)用于獲取唯一的實(shí)例對(duì)象,如果instancenullptr,則創(chuàng)建一個(gè)新的實(shí)例;否則返回已有的實(shí)例。

main函數(shù)中,我們通過Singleton::getInstance()方法分別獲取了兩個(gè)對(duì)象obj1obj2,并比較它們是否相等,如果相等則說明是同一個(gè)對(duì)象。

這種實(shí)現(xiàn)方式稱為懶漢式單例模式,它在創(chuàng)建實(shí)例對(duì)象時(shí)才進(jìn)行初始化。但是,懶漢式單例模式在多線程環(huán)境下可能會(huì)出現(xiàn)線程安全問題。如果需要保證線程安全,可以使用互斥鎖或者雙重鎖檢查等方式進(jìn)行改進(jìn)。

0