单例设计模式的DCL双检查锁机制实现

什么是单例设计模式?

单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。

具体实现

需要:

(1)将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。

(2)在该类内部产生一个唯一的实例化对象,并且将其封装为private static类型。

(3)定义一个静态方法返回这个唯一对象。

#include 
#include
using namespace std;


mutex resource_mutex;

class Config
{
private:
	Config();
public:
	~Config();

private:
	static Config *m_instance;

public:
	static Config* GetInstance()
	{
		if (m_instance == NULL)//双重锁定
		{
			unique_lockmymutex(resource_mutex);//自动加锁
			if (m_instance == NULL)
			{
				m_instance = new Config();
				static Huishou c1;
			}
		}
		return m_instance;
	}

	class  Huishou//类中套类,用来释放对象
	{
	public:
		~Huishou()
		{
			if (Config::GetInstance)
			{
				delete Config::m_instance;
				Config::m_instance = NULL;
			}
		}
	};
};



这里的Huishou类对象在程序结束之后,会执行析构函数将new出来的m_instance指针释放。

为什么要双重加锁,是因为在多线程中,多个子线程可能会先后创造出该类的子对象,破坏了单例设计模式的要求。

你可能感兴趣的:(C++)