您的位置:首页 > 其它

72 题目:设计一个类,我们只能生成该类的一个实例

2014-10-16 22:23 183 查看
72. 题目:设计一个类,我们只能生成该类的一个实例。

分析:只能生成一个实例的类是实现了Singleton 模式的类型。

/*
72. 题目:设计一个类,我们只能生成该类的一个实例。
分析:只能生成一个实例的类是实现了Singleton 模式的类型。

1.为了防止从类的外部调用构造函数,产生类的新的实例,我们应该把该类的构造函数声明成protected或者private。
2.生成一个类的实例,我们可以考虑用静态成员函数来记录,
指向这个实例的指针声明成静态变量,存放在静态存储区,把这个类的实例用new来构造,并放在堆里。

*/

class Singleton
{
	private:
		static Singleton* instance;
		Singleton();
		Singleton(const Singleton&);
	public:
		static Singleton* GetInstance()
		{
			if(instance==NULL)//如果之前没有构造过,那么就构造一个新的实例。
							  //如果构造过,那么就把之前构造的那个实例返回。
				instance=new Singleton();
			return instance;
		}
};

Singleton* Singleton::instance=NULL;

//看了别人的多线程 
//如果要加入多线程的考虑。
//加入互斥量Mutex。加锁lock()。开锁unlock();

Mutex mu;

class Singleton
{
	private:
		static Singleton* instance;
	
		Singleton();
		Singleton(const Singleton&);
	public:
		static Singleton* GetInstance()
		{
			if(instance==NULL)
			{
				lock(mu);
				if(instance==NULL)
					instance=new Singleton();
				unlock(mu);
			}
			return instance;
		}
};
Singleton* Singleton::instance=NULL;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: