在C++中,使用靜態局部變量實現單例模式是一種簡潔且類型安全的方法。以下是實現步驟:
new操作符創建對象。以下是實現單例模式的C++代碼示例:
#include <iostream>
#include <memory>
class Singleton {
public:
// 獲取Singleton類的唯一實例
static Singleton& getInstance() {
// 靜態局部變量instance在首次調用getInstance時初始化
static Singleton instance;
return instance;
}
// 刪除復制構造函數和賦值操作符,防止復制單例對象
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
private:
// 私有構造函數,防止外部通過new操作符創建對象
Singleton() {
std::cout << "Singleton class created." << std::endl;
}
// 靜態私有成員變量,用于保存唯一實例
static Singleton instance;
};
// 初始化靜態成員變量
Singleton Singleton::instance;
int main() {
Singleton& singleton1 = Singleton::getInstance();
Singleton& singleton2 = Singleton::getInstance();
// 比較兩個引用是否指向同一實例
if (&singleton1 == &singleton2) {
std::cout << "Both instances are the same." << std::endl;
} else {
std::cout << "Instances are different." << std::endl;
}
return 0;
}
上述代碼實現了一個線程安全的單例模式。若需要支持多線程環境,可以使用C++11標準中的std::call_once和std::once_flag來確保靜態局部變量只被初始化一次,從而實現線程安全的單例模式。