點選檢視程式碼
#include <iostream>
class Singleton {
private:
// 私有化建構函式,防止外部例項化
Singleton() {
std::cout << "Singleton Instance Created!" << std::endl;
}
// 刪除複製建構函式和賦值運算子,防止複製例項
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
public:
// 提供一個全域性訪問點,返回唯一例項
static Singleton& getInstance() {
static Singleton instance; // 靜態區域性變數,第一次呼叫時建立例項
return instance;
}
void showMessage() {
std::cout << "Hello from Singleton!" << std::endl;
}
};
int main() {
// 獲取Singleton的唯一例項並呼叫方法
Singleton& singleton1 = Singleton::getInstance();
singleton1.showMessage();
// 再次獲取例項
Singleton& singleton2 = Singleton::getInstance();
// 檢查兩個例項是否相同
if (&singleton1 == &singleton2) {
std::cout << "singleton1 and singleton2 are the same instance." << std::endl;
} else {
std::cout << "singleton1 and singleton2 are different instances." << std::endl;
}
return 0;
}
單例設計模式與我之前學習的C++程式碼都有所不同:
1、為了防止外部隨意例項化物件,類的建構函式和解構函式採用了private訪問修飾符。
2、getInstance()方法中的靜態區域性變數instance在第一次呼叫時建立,並在程式的生命週期中存在。(C++11及以後的標準中保證執行緒安全的懶漢式單例模式)
3、刪除了複製建構函式和operator=,防止使用者意外呼叫複製建構函式創造新的例項。