用c++实现单例模式
时间: 2023-02-19 12:08:36 浏览: 68
#include <stdio.h>
int main()
{
// This is singleton class
class Singleton
{
private:
// private constructor
Singleton() {}
// private static variable
static Singleton *s;
public:
static Singleton *getInstance()
{
if (!s)
s = new Singleton();
return s;
}
};
// Driver Code
Singleton *s = Singleton::getInstance();
printf("Address of s = %p", s);
return 0;
}
用C语言实现单例模式可以通过定义一个静态变量来维护一个单例类的唯一实例,并且通过提供一个全局访问点来访问该实例。
相关问题
使用C++实现单例模式
好的,关于使用C语言实现单例模式,我可以为您提供一些相关信息和代码示例,您可以参考以下内容:
单例模式是一种创建型设计模式,它可以确保一个类只有一个实例,并提供唯一的访问点,以便全局访问这个实例。在C语言中,可以通过静态变量、全局变量、局部静态变量等方式来实现单例模式。
以下是一种使用静态变量实现单例模式的示例代码:
```c
#include <stdio.h>
// 定义单例类
typedef struct Singleton {
int value;
} Singleton;
// 静态变量来存储单例实例
static Singleton* instance = NULL;
// 获取单例实例的方法
Singleton* get_instance() {
if (instance == NULL) { // 如果实例还未创建,则创建一个实例
instance = (Singleton*)malloc(sizeof(Singleton));
instance->value = 0;
}
return instance;
}
int main() {
// 获取单例实例
Singleton* s1 = get_instance();
Singleton* s2 = get_instance();
// 修改单例实例的值
s1->value = 100;
// 打印单例实例的值
printf("s1->value = %d\n", s1->value); // output: s1->value = 100
printf("s2->value = %d\n", s2->value); // output: s2->value = 100
return 0;
}
```
以上是使用静态变量实现单例模式的示例代码,您可以根据自己的需求进行修改和使用。希望对您有帮助!
c++11 实现单例模式
实现单例模式的经典方式是将构造函数私有化,然后提供一个静态方法来返回单例对象的指针或引用。C++11 中引入了线程安全的局部静态变量,可以通过这种方式实现单例模式的线程安全性。
下面是一个使用线程安全的局部静态变量实现的单例模式示例:
```c++
class Singleton {
public:
static Singleton& getInstance() {
static Singleton instance;
return instance;
}
private:
Singleton() = default;
~Singleton() = default;
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
};
```
在上面的示例中,getInstance() 方法返回一个 Singleton 类型的引用,该方法内部定义了一个静态局部变量 instance,该变量在首次调用 getInstance() 时进行初始化。由于静态局部变量的初始化是线程安全的,因此 Singleton 类的实例化是线程安全的。同时,由于 Singleton 类的构造函数和拷贝构造函数被定义为私有,禁止外部代码创建 Singleton 类的实例和拷贝实例,从而实现了单例模式。