单例模式这个东西还是蛮有用的,在C++类中,我们设计一个class只能有一个对象,让程序看起来更简明一些,还是有必要的。不过,新时代往往不要求我们为了设计一个东西套用单例,而是为了设计过程中使用单例模式好像看起来还不错。
那么,接下来就写一写这个单例是个什么样的模式。
咱们还是打印些Hello吧,让事情变得简单起来。
class design
{
private:
design(){}//私有化了构造函数
static design* m_instance;//静态成员变量
public:
static design* get(){
if(m_instance == nullptr){//双重锁定(双重检查)
if (m_instance == nullptr) {
m_instance = new design();
static destruct dis;
}
}
return m_instance;
}
class destruct{//类中套类,用来释放对象
public:
~destruct() {
if (design::m_instance) {
delete design::m_instance;
design::m_instance = nullptr;
}
}
};
void func(){
std::cout << " Hello " << std::endl;
}
};
//类静态变量初始化
design* design::m_instance = nullptr;
TEST(design, test01){
design* p_a = design::get();
p_a->func();
}
主要原理就是通过class类的静态变量属性,所有对象共享一个m_instance。单例模式就是利用这个特性,通过上面的get函数从而创建单例类。
值得注意的是,在get入口函数中,我使用了双重检查m_instance是否为nullptr,是,创建,否,直接返回m_instance,也就是无论申请再多的对象指向它,调用的都是同一个类,单例不就成了嘛。
通过class离开作用域析构,使用类中类从而回收m_instance这个也很重要,往往一些人会忽略掉,因为觉得程序会回收无所谓呗。
总之,单例用这个准没错,拓展功能在func继续写就是。