设计模式——单例模式

懒汉模式

cpp 复制代码
class Singleton_lazy
{
public:
	static Singleton_lazy* get()
	{
		if (sl == nullptr)
		{
			sl= new Singleton_lazy;
		}
		return sl;
	}
	class Garbo
	{
		~Garbo()
		{
			if(sl)
			delete sl;
		}
	};
private:
	Singleton_lazy(){}
	static Singleton_lazy* sl;
	static Garbo garbo;
};
Singleton_lazy* Singleton_lazy::sl = nullptr;

饿汉模式

cpp 复制代码
class Singleton_hungry
{
public:
	static Singleton_hungry* get()
	{
		return sh;
	}
	class Garbo
	{
		~Garbo()
		{
			if(sh)
			delete sh;
		}
	};
private:
	Singleton_hungry() {}
	static Singleton_hungry* sh;
	static Garbo garbo;
};
Singleton_hungry* Singleton_hungry::sh = new Singleton_hungry;

注:

1.把构造函数私有,是避免类外进行创建该对象。

2.把成员私有,避免类外直接对该静态成员进行赋值或者其他操作。

3.把成员写成静态是因为静态成员每个类只存在一份,保证了单例。

4.饿汉模式直接创建对象,该行为发生在main函数创建之前。

5.饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变,懒汉式不一定。

6.Garbo是垃圾回收类,当garbo对象出了作用域调用析构函数释放时,会顺带释放单例对象的资源。当然这个操作不是必要的,毕竟所占内存也特别小。

相关推荐
加个鸡腿儿12 小时前
从"包裹器"到"确认按钮"——一个组件的三次重构
前端·vue.js·设计模式
ALex_zry12 小时前
现代C++设计模式实战:从AIDC项目看工业级代码架构
c++·设计模式·架构
君主黑暗14 小时前
设计模式-工厂模式
设计模式
han_15 小时前
JavaScript设计模式(四):发布-订阅模式实现与应用
前端·javascript·设计模式
bmseven16 小时前
23种设计模式 - 工厂方法(Factory Method)
设计模式·工厂方法模式
pqq的迷弟16 小时前
设计模式的原则
设计模式
君主黑暗18 小时前
设计模式-抽象工厂模式
设计模式·抽象工厂模式
寰宇的行者18 小时前
设计模式:单例模式
单例模式·设计模式
zjjsctcdl19 小时前
Spring Boot 经典九设计模式全览
java·spring boot·设计模式
君主黑暗19 小时前
设计模式-建造者模式
设计模式·建造者模式