下面是一個(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ì)象,如果instance
為nullptr
,則創(chuàng)建一個(gè)新的實(shí)例;否則返回已有的實(shí)例。
在main
函數(shù)中,我們通過Singleton::getInstance()
方法分別獲取了兩個(gè)對(duì)象obj1
和obj2
,并比較它們是否相等,如果相等則說明是同一個(gè)對(duì)象。
這種實(shí)現(xiàn)方式稱為懶漢式單例模式,它在創(chuàng)建實(shí)例對(duì)象時(shí)才進(jìn)行初始化。但是,懶漢式單例模式在多線程環(huán)境下可能會(huì)出現(xiàn)線程安全問題。如果需要保證線程安全,可以使用互斥鎖或者雙重鎖檢查等方式進(jìn)行改進(jìn)。