单例模式是一种非常常用的设计模式,保证一个类只有一个单一的实例化对象。介绍两种常用的写法。
一、单例类的头文件
class Singleton
{
public:
static Singleton& getInstance();
private:
Singleton();
~Singleton();
Singleton(const Singleton &);
Singleton& operator=(const Singleton &);
};
头文件一个静态的公开调用借口。构造函数,拷贝构造函数,赋值操作符都应该是私有的,禁止用户实例化对象。
二、公开接口的两种实现方法
1.静态常量实现
Singleton& Singleton::getInstance()
{
static Singleton instance;
return instance
}
从C++1×以后,静态常量就是多线程安全的了。优点:这种写法简单,多线程安全。缺点:是和饿汉式单例一样,程序运行前就已经分配好了内存。
2.改进的实现方法
Singleton& Singleton::getInstance()
{
static Singleton *instance = new Singleton();
return *instance
}
这种方法在上一个实现中加以改进,第一次调用getInstance()函数时才分配内存。本人是常用这种方法的。
在写一篇介绍 宏 + 模板 + 静态常量的实现吧。