C++实现只有一个实例的类

要求:设计一个类,保证这个类最多只有一个实例(不能创建多个类实例),并提供一个访问这个实例的接口函数。

本质上创建了多个类对象,但是这些对象均指向一个实例

#include<iostream>
using namespace std;
class Singleton
{
public:
	static Singleton* Instance();//private中m_Instance指针的接口函数(只有静态成员函数才可访问静态成员变量

	//创建成功后,以下部分便可自由创建类的具体内容,下面是测试用的内容:
	void f1() { cout << num; }//非核心代码
	char aa = 'a';//非核心代码

private:
	/*设定一个静态指针(所有创建的类对象都共用该指针的内容
	将指针写在private中是为了防止m_Instance指向的地址内容被外部函数篡改
	修改这个指针所存的地址,且修改时只能通过piblic中的接口函数Instance()
	进行,通过在Instance()中增加限制条件,实现类最多只有一个实例*/
	static Singleton* m_Instance;int num;//非核心代码
	
	Singleton() {
		m_Instance = NULL;//在第一个实例没有创建之前,现将指针置空(防止野指针)
		num = 1;//非核心代码
	}
	~Singleton() {}
};
Singleton* Singleton::m_Instance = NULL;//静态成员变量只能在类外初始化(为与Instance()中if的内容相匹配)
Singleton* Singleton::Instance() {
	//首次创建类对象时,指针为空,这是需要为其动态分配内存地址
	if (NULL == m_Instance) {
		m_Instance = new Singleton();
	}
	/*创建过一个类对象后,静态成员变量m_Instance不为空,
	每个在其后创建的对象,Instance()通过直接将静态成员变量m_Instance返回给新的成员中的m_Instance
	实现所有成员的m_Instance指针均指向同一块内存地址*/
	return m_Instance;
}
int main() {
	Singleton* p1, * p2;
	p1 = Singleton::Instance();
	p2 = Singleton::Instance();
	p1->f1();
	p2->f1();
	cout << p1->aa << ' ' << p2->aa << ' ' << char(p2->aa + 1);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值