在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
来确保静态局部变量只被初始化一次,从而实现线程安全的单例模式。