设计模式——单例模式

懒汉模式

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

相关推荐
geovindu13 小时前
go: Lock/Mutex Pattern
开发语言·后端·设计模式·golang·互斥锁模式
学习中.........14 小时前
常见设计模式
java·设计模式
想学会c++16 小时前
单例模式笔记总结
c++·笔记·单例模式
多加点辣也没关系16 小时前
设计模式-抽象工厂模式
java·设计模式·抽象工厂模式
洛水水16 小时前
设计模式入门:从设计原则到核心模式
c++·设计模式
多加点辣也没关系18 小时前
设计模式-组合模式
设计模式·组合模式
多加点辣也没关系18 小时前
设计模式-外观模式
设计模式·外观模式
咖啡八杯18 小时前
GoF设计模式——抽象工厂模式
java·后端·spring·设计模式·抽象工厂模式
是个西兰花19 小时前
单列模式和C++中的类型转换
c++·单例模式·设计模式·rtti
多加点辣也没关系19 小时前
设计模式-享元模式
数据库·设计模式·享元模式