用C++举例说明一下这几种单例模式
时间: 2024-04-15 17:29:06 浏览: 29
好的,下面是使用C++语言举例说明几种单例模式的实现方式:
1. 饿汉式(Eager Initialization):
```cpp
class Singleton {
private:
static Singleton* instance;
Singleton() {} // 私有构造函数,防止外部创建实例
public:
static Singleton* getInstance() {
return instance;
}
};
// 在类外初始化静态成员
Singleton* Singleton::instance = new Singleton();
```
2. 懒汉式(Lazy Initialization):
```cpp
class Singleton {
private:
static Singleton* instance;
Singleton() {} // 私有构造函数,防止外部创建实例
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
// 初始化静态成员为空指针
Singleton* Singleton::instance = nullptr;
```
3. 双重检查锁(Double-Checked Locking):
```cpp
#include <mutex>
class Singleton {
private:
static Singleton* instance;
static std::mutex mtx; // 互斥锁
Singleton() {} // 私有构造函数,防止外部创建实例
public:
static Singleton* getInstance() {
if (instance == nullptr) {
std::lock_guard<std::mutex> lock(mtx); // 加锁
if (instance == nullptr) {
instance = new Singleton();
}
}
return instance;
}
};
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mtx;
```
4. 静态内部类(Static Inner Class):
```cpp
class Singleton {
private:
Singleton() {} // 私有构造函数,防止外部创建实例
public:
static Singleton* getInstance() {
static Singleton instance; // 静态局部变量,在函数第一次调用时初始化
return &instance;
}
};
```
5. 枚举(Enum):
```cpp
enum class Singleton {
INSTANCE
};
```
以上是几种常见的单例模式的C++示例代码。每种实现方式都有其适用的场景和特点,请根据具体需求选择合适的单例模式。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)