单例模式的实现
单例模式是一个比较模板化的设计模式,通常在实际应用中可以直接复用写好的框架。
如下是一种典型的模式:
class Singleton {
private:
static Singleton* s_instancePtr;
public:
static Singleton* instance() {
// TODO
return s_instancePtr;
}
private:
Singleton() = default;
~Singleton() = default;
private:
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
};
Singleton* Singleton::s_instancePtr = nullptr;
这里为了防止调用者突破单例,需要两层防护:
- 将需要的构造函数设为 private
- 将拷贝构造函数和拷贝赋值显示删除
对于这个全局的访问点,我们需要设置一个 pubilc 的 static 函数,下文也是着重对该函数进行讲解。
单例模式用在哪里?
配置管理:比如系统配置信息,一份就够了,保证所有模块读到的配置一样。
资源池:像数据库连接池、线程池,多了浪费资源,限制数量更高效。
日志记录:所有日志写到同一个地方,避免信息冗余混乱,方便统一管理。
