新浪博客

C++实现单例模式的推荐写法

2023-04-05 15:18阅读:
Singleton在数学中定义为“有且仅有一个元素的集合”。
单例模式(Singleton),是一种常用的软件设计模式,即通过单例模式创建的类在当前进程中只能产生一个实例。
单例模式的最初定义出现于《设计模式》一书,保证一个类仅有一个实例,并提供一个访问它的全局访问点。
如何保证一个类只有一个实例并且这个实例易于被访问呢?
定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。
一个更好的解决办法是让类自身负责保存它的唯一实例,并提供一个访问该实例的方法。即单例模式的三个要点:
某个类有且仅有一个实例;
该类须自行创建这个实例;
该类须向整个系统提供访问该实例的方法。
下面用C++实现单例模式的一种推荐写法,一种能够正确销毁和线程安全的写法。
class Singleton {
public:
static Singleton& get_instance() {
static Singleton s;
return s;
}
void show() {
std::cout << 'This is Singleton' << std::endl;
}
private:
Singleton() {}
Singleton(const Singleton&) = delete;
Singleton(const Singleton&&) = delete;
Singleton& operator=(const Singleton&) = delete;
};
在静态函数 Singleton::getInstance(
) 中定义了 Singleton 的静态变量对象 s,并返回此对象的引用。
由于C++函数的静态变量具有唯一性,可以确保该实例的唯一性,并且提供了访问该实例的方法。
同时为避免创建Singleton对象,还需要:
  • 构造函数私有化,使得外部无法创建Singleton对象;
  • 关闭拷贝构造函数,右值拷贝构造函数;
  • 关闭赋值运算符重载函数;

程序运行如下图所示。
C++实现单例模式的推荐写法

我的更多文章

下载客户端阅读体验更佳

APP专享