单例模式
动机
- 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。
定义
- 保证一个类仅有一个实例,并提供一个该实例的全局访问点。
- 饿汉模式->在定义类的时候就创建单例对象 没有线程安全问题
class Singleton {
private:
Singleton() = default;
Singleton(const Singleton& other) = default;
static Singleton* m_Instance;
public:
static Singleton* getInstance();
void print() {
std::cout << "静态实例对象" << std::endl;
}
};
Singleton* Singleton::m_Instance = new Singleton;
Singleton* Singleton::getInstance() {
return Singleton::m_Instance;
}
int main() {
Singleton* singleTon = Singleton::getInstance();
singleTon->print();
}
- 懒汉模式->什么时候使用这个单例对象,什么时候创建 存在线程安全问题
class Singleton {
private:
Singleton();
Singleton(const Singleton& other);
public:
static Singleton* getInstance();
static Singleton* m_Instance;
};
Singleton* Singleton::m_Instance = nullptr;
static Singleton::Singleton* getInstance() {
if(nullptr == m_Instance) {
m_Instance = new Singleton();
}
return m_Instance;
}