C++设计模式(1):单例模式

单例模式,顾名思义,就是整个程序中只允许有一个实例,并且该实例通过程序运行的结束而释放资源。

SingleTon.hpp

#ifndef _SINGLETON_H
#define _SINGLETON_H

#include<iostream>
using namespace std;
class Singleton
{
    public:
    static const Singleton* getInstance();

    static void DoSome(){
        cout << "ok" << endl;
    }

    private:    //将构造和析构私有化,防止外部访问
    Singleton();
    ~Singleton();

    static Singleton *This;     //static解决资源分配释放的问题,随着代码运行结束释放
}; 

Singleton* Singleton::This = NULL;  //懒汉模式: 等到需要的时候再创建实例
//Singleton* Singleton::This = new Singleton(); //饿汉模式:在定义类的时候就创建实例
const Singleton* Singleton::getInstance(){
    if(This == NULL){
        This = new Singleton();
    }
    return This;
}

Singleton::Singleton(){

}

Singleton::~Singleton(){

}




#endif

构造函数和析构函数设为私有,无法通过普通方式进行实例创建;
将 *This 指针和 函数设为static,使得其可以在全局代码区进行调用;

demo.cpp

#include "Singleton.hpp"

int main() {
    Singleton::getInstance()->DoSome();
    
    Singleton::getInstance()->DoSome();
    
    return 0;
}

运行结果:
ok
ok

注:static函数只能由static成员调用;

饿汉模式:在定义类的时候就进行实例化 (形象地将,就好比一个饿汉,巴不得把食物先塞进肚子里再说,未雨绸缪)

Singleton* Singleton::This = NULL;

懒汉模式:在定义类的时候置空,等到程序需要创建实例时再进行创建;(形象地说,就好比一个懒汉,开始啥事都不做,等到要做的时候再去做)

Singleton* Singleton::This = new Singleton();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值