设计模式——单例模式

懒汉模式

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

相关推荐
c++之路10 小时前
C++ 设计模式全总结
java·c++·设计模式
爱吃牛肉的大老虎12 小时前
Spring中用到的设计模式
java·spring·设计模式
代码中介商12 小时前
C++四大设计模式:单例、工厂、观察者、策略
java·c++·设计模式
basketball61613 小时前
设计模式入门:3. 适配器模式详解 C++实现
c++·设计模式·适配器模式
AI大法师13 小时前
最小视觉系统怎么搭:Logo、颜色、字体、模板和品牌介绍先做什么
人工智能·设计模式·新媒体运营
geovindu16 小时前
python: N-Barrier Pattern
开发语言·python·设计模式·屏障模式
wunaiqiezixin17 小时前
如何在C++中实现一个单例模式?
c++·单例模式
basketball61618 小时前
设计模式入门:2. 工厂模式详解 C++实现
开发语言·c++·设计模式
basketball61618 小时前
设计模式入门:1. 单例模式详解 C++实现
c++·单例模式·设计模式
小马爱打代码18 小时前
Spring源码中的设计模式实战:从理论到源码的深度解析
java·spring·设计模式