单例模式
定义
单例模式的要求是一个类只能创建一个对象,因此对于这个类的构造函数要严格限制,不允许外部访问。根据创建的时机又分饿汉式和懒汉式,前者在类创建时就会创建实例,后者则是当使用类时检测到实例不存在才会创建。
主要用途
提供一个访问该类对象实例的全局访问点,比如日志记录或者数据库的连接
实现
- 构造函数需要private
- 拷贝构造和赋值构造禁用
- 考虑饿汉和懒汉,即注意其new一个对象的时机
# 饿汉式
class Singleton{
private:
static Singleton* instance = new Singleton();
Singleton(){};
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
public:
static Singleton* getInstance(){
return instance;
}
};
# 懒汉式
class Singleton{
private:
static Singleton* instance;
Singleton(){};
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
public:
static Singleton* getInstance(){
if(instance == 0)
instance = new Singleton();
return instance;
}
};
注意:上面只是简单实现,如果要实际应用,还需要考虑线程安全问题。