单件模式的C++实现

    单件模式是一种用于确保整个应用程序中只有一个类实例且这个实例所占资源在整个应用程序中是共享时的程序设计方法(根据实际情况,可能需要几个类实例)。在某些情况下,这种程序设计方法是很有用处的。

Singleton模式的实现基于两个要点:
1)不直接用类的构造函数,而另外提供一个Public的静态方法来构造类的实例。通常这个方法取名为Instance。Public保证了它的全局可见性,静态方法保证了不会创建出多余的实例。
2)将类的构造函数设为Private,即将构造函数"隐藏"起来,任何企图使用构造函数创建实例的方法都将报错。这样就阻止了开发人员绕过上面的Instance方法直接创建类的实例。
#include <iostream>
#include <cassert>
using namespace std;

template<typename T>
class Singleton 
{
public:
	static T *getInstancePtr()
	{
		if (m_Instance == NULL) {
			m_Instance = new T;
		}
		return m_Instance;
	}
 	static T& getInstance()
 	{
 	     assert(m_Instance); 
 	     return (*m_Instance);
 	}
private:
	Singleton(){};
	static T *m_Instance;
};

template<typename T> T * Singleton<T>::m_Instance = NULL;

class A
{
public:
	void display(){cout<<"A is display"<<endl;}

};
int main()
{
	/*Singleton<int>::getInstancePtr();
	cout<<Singleton<int>::getInstance()<<endl;
	Singleton<int>::getInstance()=5;
	cout<<Singleton<int>::getInstance()<<endl;*/

	A* p=Singleton<A>::getInstancePtr();
	p->display();

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值