c++11 实现单例模式
时间: 2023-08-08 22:09:42 浏览: 62
实现单例模式的经典方式是将构造函数私有化,然后提供一个静态方法来返回单例对象的指针或引用。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 类的实例和拷贝实例,从而实现了单例模式。
相关问题
c++语言实现单例模式
单例模式是一种设计模式,它保证一个类只有一个实例,并提供一个全局访问点。在 C 语言中,可以通过静态变量和静态函数来实现单例模式。下面是一个简单的例子:
```
#include <stdio.h>
static int count = 0;
static void singleton_func(void) {
printf("Singleton function called, count = %d\n", count++);
}
void main(void) {
singleton_func();
singleton_func();
singleton_func();
}
```
在这个例子中,我们定义了一个静态变量 `count` 和一个静态函数 `singleton_func`。由于静态变量和静态函数只能在当前文件中访问,所以它们只能被当前文件中的函数调用,从而实现了单例模式。
在 `main` 函数中,我们通过调用 `singleton_func` 函数来测试单例模式。每次调用该函数时,都会打印出当前的 `count` 值,并将其加 1。由于 `count` 是一个静态变量,所以它的值会一直被保留下来,直到程序退出。因此,无论我们在程序的哪个地方调用 `singleton_func` 函数,都会得到相同的 `count` 值,从而实现了单例模式。
c++编写代码实现单例模式
好的,关于实现单例模式的问题,以下是一个简单的 C++ 代码示例:
```
// Singleton.h
class Singleton {
public:
static Singleton* getInstance();
// 将构造函数和析构函数设为 private,确保不能通过实例化对象来访问它们
private:
Singleton();
~Singleton();
static Singleton* instance; // 静态变量,用于保存单例实例的指针
};
// Singleton.cpp
Singleton* Singleton::instance = nullptr;
Singleton::Singleton() {}
Singleton::~Singleton() {}
Singleton* Singleton::getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
```
通过将构造函数和析构函数设为 private,除了在类内部,无法通过实例化对象来访问它们,从而实现了单例模式。同时,使用静态变量 instance 来保存单例实例的指针,在第一次调用 getInstance() 方法时创建单例实例,并在以后的每次调用中返回该实例的指针。