单例模式
是设计模式中的一种,是大佬们针对典型场景设计的解决方案。
典型场景:一个对象/一个资源只能被初始化加载一次。
例如:你在打游戏的时候,游戏有很多图片资源。希望一个图片只加载一次。
实现方式:饿汉/懒汉
- 饿汉:所有资源在程序初始化阶段一次性完成初始化(资源在初始化的时候一次性全部加载,后续只需要使用就可以)
template<class T>
class single
{
static T _data;//所以实例化的对象共用同一份资源
T* get_instance()
{
return &_data;
}
}
资源初始化的时候会慢一点,但是运行起来以后,会很流畅。
- 懒汉:资源在使用的时候进行初始化(用到的时候再去加载,当然也要保证只加载一次)
template <typename T>
class Singleton
{
static T* inst;
public:
static T* GetInstance() {
if (inst == NULL) {
inst = new T();
}
return inst;
}
}
- 在使用的时候加载一次资源,会涉及到线程安全问题。(volatile、static、mutex、二次判断)
- 使用static保证多个对象使用同一份空间资源。