单例模式,顾名思义,就是整个程序中只允许有一个实例,并且该实例通过程序运行的结束而释放资源。
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();