C++中實現單例模式的方法有多種,以下是兩種常用的方法:
class Singleton {
private:
static Singleton* instance;
Singleton() {} // 私有構造函數
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = nullptr;
在餓漢式單例模式中,實例在程序啟動時就已經創建好,getInstance()方法直接返回該實例。如果需要延遲實例化,則可以在getInstance()方法中進行判斷和實例化。
class Singleton {
private:
static Singleton* instance;
Singleton() {} // 私有構造函數
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = nullptr;
懶漢式單例模式中,實例在第一次調用getInstance()方法時才會被創建,需要注意在多線程環境下的線程安全性問題。可以使用鎖機制或者雙重檢查鎖機制來保證線程安全性。
需要注意的是,以上兩種方式都需要將默認構造函數設為私有,以防止在其他地方直接實例化對象。