C++单例模式示例
时间: 2025-06-02 16:41:04 浏览: 33
### C++ 单例模式的实现方式
单例模式是一种设计模式,其核心目标是确保某一个类仅有一个实例存在,并提供全局访问点。以下是基于提供的引用内容以及专业知识整理的内容。
#### 1. **单例模式的核心思想**
单例模式的关键在于控制类的实例化过程,使得在整个应用程序中始终只有一个实例存在。为了达到这一目的,在 C++ 中通常采用以下策略:
- 私有化构造函数和析构函数,防止外部直接创建或销毁对象[^4]。
- 提供一个公共的静态方法 `getInstance()` 来获取唯一的实例[^3]。
- 使用静态成员变量存储唯一实例[^5]。
#### 2. **C++ 单例模式的典型实现**
下面是一个完整的 C++ 单例模式实现示例:
```cpp
#include <iostream>
#include <mutex>
class Singleton {
public:
// 获取单例实例的静态方法
static Singleton& getInstance() {
std::call_once(flag, [&]() { instance = new Singleton(); });
return *instance;
}
// 删除拷贝构造函数和赋值运算符重载,防止复制实例
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
// 示例方法
void someMethod() const {
std::cout << "Singleton Method Called" << std::endl;
}
private:
// 将构造函数设为私有,防止外部创建实例
Singleton() {}
// 静态成员变量初始化
static Singleton* instance;
static std::once_flag flag;
};
// 初始化静态成员变量
Singleton* Singleton::instance = nullptr;
std::once_flag Singleton::flag;
int main() {
// 获取单例实例并调用示例方法
Singleton& singleton = Singleton::getInstance();
singleton.someMethod();
return 0;
}
```
#### 3. **代码解析**
- **`static Singleton& getInstance()`**: 这是一个静态方法,负责返回类的唯一实例。首次调用时会创建实例,之后每次都会返回同一个实例[^3]。
- **`std::call_once` 和 `std::once_flag`**: 这些工具用于确保线程安全性,即使在多线程环境下也能保证只创建一个实例[^2]。
- **删除拷贝构造函数和赋值运算符**: 通过显式声明这些操作为 `delete`,可以有效阻止对象被复制或赋值,从而维护单例模式的一致性[^4]。
#### 4. **注意事项**
- **线程安全**: 在多线程环境中,必须采取措施确保 `getInstance()` 方法不会因并发而创建多个实例。上述代码中的 `std::call_once` 已经解决了这个问题。
- **资源释放**: 动态分配的对象需要手动管理内存。虽然现代 C++ 推荐使用智能指针(如 `std::unique_ptr`),但在某些场景下仍需注意显式的内存清理逻辑[^5]。
---
###
阅读全文
相关推荐



















