0%

单例模式

单例模式

  • 构造函数的调用 析构函数的调用,防止内存泄漏
  • 多线程安全
  • 单例模式防止外部调用构造函数创建对象 构造函数和析构函数私有化防止外部调用

  • 宏实现

  • 模板实现

懒汉式

调用时创建单例对象
延迟加载
比如加载配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template<class T>
class Singleton{
private:
static T* m_instance;
public:
static T* getInstance(){
if(m_instance == nullptr){
m_instance = new T();
}
return m_instance;
}
};

template<typename T>
T* Singleton<T>::m_instance=nullptr;

饿汉式

应用程序启动时创建单例对象

1
2
3
4
5
6
7
8
9
10
11
template<typename T>
class Singleton{
private:
static T m_instance;
public:
static T* getInstance(){
return &m_instance;
}
};
template<typename T>
T Singleton<T>::m_instance;