c++生成单例模式

本文深入探讨了单例设计模式的概念及实现方式,包括饿汉式和懒汉式的具体代码示例,并展示了如何通过修改懒汉式实现来创建有限数量的对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单例设计模式:一个类在内存中的对象只能有1个


步骤:

1、构造函数私有化

2、创建一个指向本类对象的静态指针

3、创建一个静态函数,返回2中的指针


饿汉式在程序启动或单件模式类被加载的时候,单件模式实例就已经被创建。

class Single2
{
private:
	Single2()
	{data=0;}
	static Single2 *s;
	int data;
public:
	static Single2 * getInstance()
	{
		return s;
	}
	void setData(int i)
	{
		data=i;
	}
	void getData()
	{
		cout<<data<<endl;
	}
};
Single2* Single2::s=new Single2();


懒汉式当程序第一次访问单件模式实例时才进行创建。

class Single
{
private:
	Single()
	{
		data=0;
	}
	static Single *s;
	int data;
public:
	static Single* GetInstance()
	{
		if(s==NULL)
		{
			s=new Single();
		}
		return s;
	}
	void setData(int i)
	{
		data=i;
	}
	void getData()
	{
		cout<<data<<endl;
	}
};
Single* Single::s=NULL;

懒汉式还有一个应用是:可以创建多个对象,而不仅仅是一个


#include<iostream>
using namespace std;

class Single
{
private:
	Single()
	{
		data=0;
	}
	static Single *s;
	int data;
	static int count;
public:
	static Single* GetInstance()
	{
		//if(s==NULL)
		if(count<3)//可以最多有3个实例
		{
			s=new Single();
			count++;
		}
		return s;
	}
	void setData(int i)
	{
		data=i;
	}
	void getData()
	{
		cout<<data<<endl;
	}
};
int Single::count;
Single* Single::s=NULL;




class Single2
{
private:
	Single2()
	{data=0;}
	static Single2 *s;
	int data;
public:
	static Single2 * getInstance()
	{
		return s;
	}
	void setData(int i)
	{
		data=i;
	}
	void getData()
	{
		cout<<data<<endl;
	}
};
Single2* Single2::s=new Single2();


void main()
{
	cout<<"---------------懒汉式   最多3个实例------------------------"<<endl;
	Single *s1;
	s1=Single::GetInstance();
	Single *s2;
	s2=Single::GetInstance();
	Single *s3;
	s3=Single::GetInstance();
	Single *s4;
	s4=Single::GetInstance();
	Single *s5;
	s5=Single::GetInstance();

	s1->setData(1);
	s2->setData(2);
	s3->setData(3);
	s4->setData(4);
	s5->setData(5);

	
	s1->getData();
	s2->getData();
	s3->getData();
	s4->getData();
	s5->getData();

	cout<<"-------------饿汉式   单例--------------------------"<<endl;
	Single2 *ss1;
	ss1=Single2::getInstance();
	ss1->setData(100);
	Single2 *ss2;
	ss2=Single2::getInstance();
	ss1->setData(200);

	ss1->getData();
	ss2->getData();


}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值