下面是一個簡單的C++單例模式的代碼示例:
class Singleton {
private:
static Singleton* instance;
Singleton() {} // 將構造函數設為私有,防止外部創建對象
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = nullptr; // 靜態成員變量需要在類外初始化
int main() {
Singleton* obj1 = Singleton::getInstance();
Singleton* obj2 = Singleton::getInstance();
// obj1和obj2是同一個對象
if (obj1 == obj2) {
std::cout << "obj1 and obj2 are the same instance." << std::endl;
}
return 0;
}
在這個例子中,Singleton
類只有一個私有的靜態成員變量instance
和一個公有的靜態成員函數getInstance
。靜態成員變量instance
用于存儲唯一的實例對象。getInstance
函數用于獲取唯一的實例對象,如果instance
為nullptr
,則創建一個新的實例;否則返回已有的實例。
在main
函數中,我們通過Singleton::getInstance()
方法分別獲取了兩個對象obj1
和obj2
,并比較它們是否相等,如果相等則說明是同一個對象。
這種實現方式稱為懶漢式單例模式,它在創建實例對象時才進行初始化。但是,懶漢式單例模式在多線程環境下可能會出現線程安全問題。如果需要保證線程安全,可以使用互斥鎖或者雙重鎖檢查等方式進行改進。