实现Singleton模式

属于面试常考题型

常考原因:设计模式在面向对象程序设计中有着举足轻重的作用,在面试过程中很多公司都喜欢问一些与设计模式相关的问题。例如:写一个类,且只能创建一个类对象实例

方法一:

网上常用的解法,就是将类的构造函数变成私有,然后创建一个静态成员函数,通过调用静态成员函数来调用私有的类构造函数,可以创建一个或者多个对象实例,都没有问题。例如:

class Singleton2
{
protected:
	Singleton2()
	{
		cout<<"construct a instance"<<endl;
	}

public:
	static Singleton2* pSingleton;	//数据成员
	static Singleton2* GetInstance()
	{
		if ( NULL == pSingleton )
			pSingleton = new Singleton2();
		else
			cout<< "has already a instance" << endl;

		return pSingleton;

	}
	~Singleton2()
	{
		if ( pSingleton != NULL )
		{	
			cout<< "destructor" << endl;
			delete pSingleton;
		}
	}
};
Singleton2* Singleton2::pSingleton = NULL;

 

说明:直接调用Singleton2::GetInstance();来创建一个对象实例为了防止从类的外部调用构造函数,产生类的新的实例,我们应该把该类的构造函数声明成protected或者private。由于只能生成一个类的实例,我们可以考虑用静态成员变量来记录实例个数。如果没有构造过,那么就构造一个新的实例。如果构造过,那么就把之前构造的那个实例返回。方法二:

我认为,构造函数可以公有,只要设置一个整型静态成员变量计数器,初始化为0,如果不为0,那么就不能继续生成实例。不知道这样做符合不符合题意

class Singleton
{
public:
	Singleton()
	{
		if (count == 0)
		{
			count++;
			pSingleton = new A;
		}
		else
			cout<< "An instance has already exists" <<endl;
	}
	~Singleton()
	{
		if (count != 0 )
		{
			count--;
			delete pSingleton;
		}
	}
	static int count;
private:
	A* pSingleton;
};
int Singleton::count = 0;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值