设计模式之单例模式

本文介绍了单例模式在C++中的应用,通过静态变量保证类只有一个实例,并强调了双重检查锁定机制和类内析构的重要性。
摘要由CSDN通过智能技术生成

        单例模式这个东西还是蛮有用的,在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继续写就是。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值