单例模式

//只有一个实例,所以我们不能把构造函数借口暴露给用户(否则用户可以创建很多个)。
//所以采用一个静态成员函数static Singleton* getInstance();来获取实例



 //单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例
#include <stdio.h>
#include <iostream>
using std::cout;
using std::endl;

//要求:在内存之中只能创建一个对象
//1. 该对象不能是全局对象或者栈对象
//2. 只能是堆对象
//作用:
//	在一定程序上,它是可以取代全局变量

class Singleton
{
public:
	static Singleton * getInstance()       
        {                                   //所以采用一个静态成员函数static Singleton* getInstance();来获取实例
		if(_pInstance == NULL)
		{
			_pInstance = new Singleton;
		}
		return _pInstance;
	}

	static void destroy()
	{
		if(_pInstance)
			delete _pInstance;
	}

private:
	Singleton(){ 
		cout << "Singleton()" << endl;
	}
	~Singleton(){
		cout << "~Singleton()" << endl;
	}

private:
	static Singleton * _pInstance;//用来保存第一次new的指针,,为了使p1,p2相同,所有还需要一个static
};

Singleton * Singleton::_pInstance = NULL;

//Singleton s3;

int main(void)
{
//	Singleton s1;//Error, 它会调用默认构造函数
//	Singleton s2;//通过语法规则让改语句无法编译通过,把它放在private区域
	
	
	Singleton * p1 = Singleton::getInstance();
	Singleton * p2 = Singleton::getInstance();
	Singleton * p3 = Singleton::getInstance();
	
	printf("p1 = %p\n", p1);
	printf("p2 = %p\n", p2);
	printf("p3 = %p\n", p3);


	//delete p1;//Error通过语法规则让语句无法编译通过
	
	Singleton::destroy();

	return 0;
}






                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值