单例模式
2025/12/26小于 1 分钟
单例模式
区别
- 创建时机
- 懒汉模式是指针,调用getInstance的时候才会创建对象
- 饿汉模式是静态成员,在数据段创建的(程序启动时就创建了对象)
- 线程安全
- 饿汉安全
示例
懒汉模式
class Singleton {
private:
static Singleton* instance;
// 私有构造函数,防止外部创建
Singleton() {
std::cout << "Singleton created\n";
}
// 禁用拷贝和赋值
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
void showMessage() {
std::cout << "Hello from Singleton!\n";
}
~Singleton() {
std::cout << "Singleton destroyed\n";
}
};
// 静态成员初始化
Singleton* Singleton::instance = nullptr;饿汉模式
class EagerSingleton {
private:
static EagerSingleton instance;
EagerSingleton() {
std::cout << "EagerSingleton created at program start\n";
}
EagerSingleton(const EagerSingleton&) = delete;
EagerSingleton& operator=(const EagerSingleton&) = delete;
public:
static EagerSingleton& getInstance() {
return instance; // 直接返回引用
}
void showMessage() {
std::cout << "Hello from EagerSingleton!\n";
}
~EagerSingleton() {
std::cout << "EagerSingleton destroyed\n";
}
};
// 程序启动时就创建实例(静态初始化)
EagerSingleton EagerSingleton::instance;