用C++写出懒汉式单例模式和饿汉式单例模式的例子
时间: 2024-03-21 08:34:13 浏览: 70
以下是C++中懒汉式单例模式和饿汉式单例模式的例子:
1. 饿汉式单例模式
```cpp
class Singleton {
private:
static Singleton* instance;
Singleton() {} // 私有构造函数
public:
static Singleton* getInstance() {
return instance;
}
};
Singleton* Singleton::instance = new Singleton(); // 在类外初始化静态成员变量
int main() {
Singleton* s1 = Singleton::getInstance();
Singleton* s2 = Singleton::getInstance();
if (s1 == s2) {
cout << "s1和s2是同一个实例" << endl;
}
return 0;
}
```
2. 懒汉式单例模式
2.1 简易版
```cpp
class Singleton {
private:
static Singleton* instance;
Singleton() {} // 私有构造函数
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = nullptr; // 在类外初始化静态成员变量
int main() {
Singleton* s1 = Singleton::getInstance();
Singleton* s2 = Singleton::getInstance(); if (s1 == s2) {
cout << "s1和s2是同一个实例" << endl;
}
return 0;
}
```
2.2 私有嵌套类-回收专用
```cpp
class Singleton {
private:
Singleton() {} // 私有构造函数
~Singleton() {} // 私有析构函数
static Singleton* instance;
class GarbageCollector { // 私有嵌套类
public:
~GarbageCollector() {
if (Singleton::instance != nullptr) {
delete Singleton::instance;
Singleton::instance = nullptr; }
}
};
static GarbageCollector gc; // 静态成员变量,程序结束时自动调用析构函数
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = nullptr; // 在类外初始化静态成员变量
Singleton::GarbageCollector Singleton::gc; // 在类外初始化静态成员变量
int main() {
Singleton* s1 = Singleton::getInstance();
Singleton* s2 = Singleton::getInstance();
if (s1 == s2) {
cout << "s1和s2是同一个实例" << endl;
}
return 0;
}
```
阅读全文