C++单例模式

目录

一、单例模式的创建

二、实例代码

三、总结

在很多时候,我们整个项目工程当中,某个类的对象是有且仅有一个,生命周期是整个项目程序,如果是这种情况下,我们还去创建多个不同的类,可能会造成意想不到的bug,可能这类bug还挺隐蔽。那么在C++中如何创建有且仅有唯一的单个对象呢?其实很简单,只要做到三步即可。

一、单例模式的创建

1、将类的构造函数的访问权限设置为private私有的(防止外部进行访问);

2、设置一个静态全局的类对象instance;

3、创建一个public公有的方法GetInstance(),当需要访问这个类时,就只需要对instance进行判断是否为nullptr:

(1)当instance为nullptr,则创建类对象,并用instance做为标识;

(2)当instance不为nullptr,则返回instance本身。

二、实例代码

#include <iostream>
using namespace std;

class Singleton
{
	//静态成员变量类内定义,类外初始化
	static Singleton* m_instance;								

	//构造函数设为私有
	Singleton()															
	{
	
	}
	//拷贝构造也为私有
	Singleton(const Singleton&);		
	//赋值操作也设置为私有
	Singleton& operator= (const Singleton&);		

public:
	//设置访问instance的公有方法
	static Singleton* GetInstance();									

	void Printfln()
	{
		std::cout << "当前对象地址: " << this << std::endl;
	}
};
//静态成员变量类内定义,类外初始化
Singleton* Singleton::m_instance = nullptr;			

// 1、当instance为nullptr,则创建类对象,并用instance做为标识;
// 2、当instance不为nullptr,则返回instance本身。
Singleton* Singleton::GetInstance()
{
	if (m_instance == nullptr)
	{
		m_instance = new Singleton();
	}
		return m_instance;
}

int main()
{
	Singleton *singleton1 = Singleton::GetInstance();
	Singleton *singleton2 = Singleton::GetInstance();
	Singleton *singleton3 = Singleton::GetInstance();

	singleton1->Printfln();
	singleton2->Printfln();
	singleton3->Printfln();
	return 0;
}

三、总结

从运行结果来看,三个singleton对象都是分别指向了同一块内存,这就实现了有且仅有一个实例,而且这些singleton的生命周期是永恒的,程序运行结束也会自动释放,并不需要手动的去delete。

当然创建单例模式方法不止这一种,但是往往在项目开发中,这一种就已经够用和实用的了,单例,在我看来这是C++初学者所具备的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值