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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值