C++中的单例模式设计

      有时也许我们会遇到这样的状况:创建一个类,但只想让这个类实例化一个对象,那么应该怎么办呢?这就是c++中的单例设计模式。我是今天读书时看到这样一种奇怪的设计模式,作为一种学习方式,我决定把它写成一篇短博来巩固我的记忆。

      先浅谈一下做法和原理:首先我们要把这个类的构造函数声明为私有的或者受保护的,这样就不能随便在别的函数或线程中实例化这个类的对象了。接着还要声明两个静态成员。一个是静态的同类共享指针,类型是本类,并且要在外面把它初始化为null;另一个是静态函数,它可以是公有的,因为要把这个函数当成一个“构造函数”,在这个函数里面检测那个静态指针是否是null,如果是,表示这个类还没有实例化过对象,那么接下来应该实例化一个对象并返还,如果不是null,则表示这个类曾经实例化过对象,那么直接返回对象的地址就行了。

      示例代码如下:

#include <iostream>
using namespace std;

class Singleton
{
public:
	static Singleton * GetInstance()//这个其实是我们穿马甲的“构造函数”,前面的static是必不可少的
	{
		if (NULL == m_pInstance)//如果还没有实例化过该类的对象
		{
			m_pInstance = new Singleton();
		}
		return m_pInstance;
	}

protected:
	Singleton()//将构造函数设置成受保护的
	{ }
private:
	static Singleton * m_pInstance;//这个变量必须是静态共享的
};

Singleton * Singleton::m_pInstance = nullptr;//必须在外面将静态变量初始化

int main()
{
	Singleton * p = Singleton::GetInstance();//创建一个该类的对象
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章