c++设计模式饿汉式和懒汉式
时间: 2024-09-24 22:24:16 浏览: 51
在C++中,设计模式通常涉及到创建软件组件的方式,以便解决常见问题并提高代码质量。关于单例模式(Singleton Pattern),有两个常见的实现策略,即“饿汉式”(Eager Singleton)和“懒汉式”(Lazy Singleton)。
**饿汉式**:
饿汉式单例是在类加载时就实例化了对象。这是通过声明静态成员变量并在类加载时初始化完成的。这种方式的优点是一旦应用程序启动,单例就会立即可用,不需要额外的同步措施。然而,缺点是如果该类在程序运行期间不会使用到,可能会造成资源浪费。
```cpp
class Singleton {
public:
static Singleton& getInstance() {
static Singleton instance;
return instance;
}
private:
Singleton() {} // 构造函数保持私有,防止外部直接创建实例
};
```
饿汉式的优点是线程安全,因为全局对象在一开始就创建好了。
**懒汉式**:
懒汉式则是延迟创建单例对象,只有当第一次需要获取实例时才真正创建。这通常通过双重检查锁定(Double-Checked Locking)技术来保证线程安全性:
```cpp
class Singleton {
private:
static Singleton* instance;
explicit Singleton() {} // 防止外部直接创建
public:
static Singleton& getInstance() {
if (instance == nullptr) { // 双重检查
std::lock_guard<std::mutex> lock(mutex); // 线程锁
if (instance == nullptr) { // 再次确认
instance = new Singleton();
}
}
return *instance; // 返回唯一实例
}
private:
static std::mutex mutex;
};
// 初始化静态成员变量
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mutex;
```
懒汉式的好处是可以节省内存,直到真正需要时才会创建,但需要更复杂的线程同步机制来保证线程安全。
阅读全文