设计模式——单例模式

懒汉模式

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对象出了作用域调用析构函数释放时,会顺带释放单例对象的资源。当然这个操作不是必要的,毕竟所占内存也特别小。

相关推荐
李宥小哥23 分钟前
结构型设计模式2
网络·数据库·设计模式
guangzan3 小时前
TypeScript 中的策略模式
设计模式
学习编程的Kitty3 小时前
JavaEE初阶——多线程(5)单例模式和阻塞队列
java·开发语言·单例模式
乐悠小码5 小时前
Java设计模式精讲---04原型模式
java·设计模式·原型模式
李宥小哥8 小时前
行为型设计模式2
windows·设计模式
Juchecar8 小时前
Java示例:设计模式是如何在实战中“自然生长”出来
java·设计模式
Juchecar8 小时前
超越经典23种设计模式:新模式、反模式与函数式编程
设计模式·云原生·函数式编程
Juchecar8 小时前
设计模式不是Java专属,其他语言的使用方法
java·python·设计模式
_Power_Y9 小时前
Linux&git入门&设计模式(常考点)
linux·git·设计模式
执笔论英雄20 小时前
【大模型训练】加载load_state 中的一些技巧 工厂设计模式
设计模式