写一段c++单例模式代码
时间: 2023-09-03 11:04:57 浏览: 131
### 回答1:
// 单例模式代码
class Singleton {
private:
static Singleton* instance;
Singleton() {}
public:
static Singleton* getInstance() {
if (instance == NULL)
instance = new Singleton();
return instance;
}
};
Singleton* Singleton::instance = NULL;
### 回答2:
单例模式是一种设计模式,用于确保一个类只有一个实例,并提供全局访问点来访问该实例。在C语言中,实现一个单例模式可以通过静态全局变量或者静态局部变量来实现。
下面是一个使用静态全局变量实现的单例模式代码示例:
```c
#include <stdio.h>
// 定义一个全局的静态指针变量
static int *instance = NULL;
// 创建单例实例的函数
int *getInstance() {
// 判断是否已经存在实例
if (instance == NULL) {
// 如果不存在,则创建一个实例
instance = malloc(sizeof(int));
*instance = 123; // 假设这是需要存储的数据
}
return instance;
}
int main() {
// 获取单例实例
int *inst = getInstance();
// 使用实例
printf("单例实例的值:%d\n", *inst);
// 修改实例的值
*inst = 456;
// 再次获取实例,会发现其值已经改变
int *inst2 = getInstance();
printf("修改后的单例实例的值:%d\n", *inst2);
return 0;
}
```
这段代码使用静态全局变量 `instance` 存储单例实例,通过 `getInstance()` 函数来获取实例。如果 `instance` 为空,则会创建一个实例并赋值给 `instance`,否则直接返回已存在的实例。在 `main` 函数中,先获取实例并使用,然后修改实例的值后再次获取实例,可以看到其值已经改变。
### 回答3:
单例模式是一种设计模式,在程序中只允许存在一个实例对象,该对象可以被多个线程使用。单例模式主要用于当一个对象只能被实例化一次时,例如数据库连接、线程池等。
下面是一个简单的C语言单例模式的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 创建单例类的结构体
typedef struct Singleton {
int data;
} Singleton;
// 定义静态实例变量,全局唯一
static Singleton* instance = NULL;
// 为单例类提供创建实例的方法
Singleton* SingletonGetInstance() {
// 检查实例是否已经存在
if (instance == NULL) {
// 实例化新的单例对象
instance = (Singleton*)malloc(sizeof(Singleton));
// 初始化实例数据
instance->data = 0;
}
return instance;
}
int main() {
// 获取单例实例
Singleton* obj1 = SingletonGetInstance();
// 设置实例数据
obj1->data = 10;
// 获取同一个单例实例
Singleton* obj2 = SingletonGetInstance();
printf("obj2->data = %d\n", obj2->data); // 输出 10,说明obj2与obj1是同一个实例
return 0;
}
```
在上述代码中,定义了一个Singleton结构体作为单例类,在结构体内定义了一个data成员用于存储数据。使用静态指针变量instance来保存实例对象,初始时为NULL。
通过SingletonGetInstance函数来获取单例实例。在函数内部,判断instance是否为NULL,若为NULL则分配内存空间创建新的实例对象,并对其进行初始化。最后返回实例对象的指针。
在主函数里面,首先通过SingletonGetInstance函数获取到实例对象obj1,并设置其data值为10。然后再次调用SingletonGetInstance函数获取到实例对象obj2,并打印其data值,可看到obj2与obj1的data值相同,说明obj2与obj1是同一个实例对象。
阅读全文