C++实现设计模式之 —— 单例模式 Singleton

原创 2015年07月07日 20:40:48

  单例模式是最简单的创建型模式,当某个类只需要唯一的一份实例时,使用单例模式可以确保不会创建多余的实例。在C++ 中,单例模式可以避免全局变量的使用。下面是一个典型的线程安全的单例模式

#ifndef Singleton_h__
#define Singleton_h__

#include <mutex> //C++11

class CSingleton
{
public:
	static CSingleton* GetInstance()
	{
		if (m_pInstance == NULL)
		{
			m_lock.lock();
			//double check for better performance
			if (m_pInstance == NULL)
			{
				m_pInstance = new CSingleton();
			}
			m_lock.unlock();
		}
		return m_pInstance;
	}

	static void Destroy()
	{
		m_lock.lock();
		delete m_pInstance;
		m_pInstance = NULL;
		m_lock.unlock();
	}

	void Method()
	{
		//
	}
private:
	CSingleton(){}
	~CSingleton()
	{
		delete m_pInstance;
		m_pInstance = NULL;
	}

	//Disable copy and assign
	CSingleton(const CSingleton& rhs);
	CSingleton& operator = (const CSingleton& rhs);

private:
	static CSingleton*	m_pInstance;
	static std::mutex	m_lock;
};


CSingleton* CSingleton::m_pInstance = NULL;

std::mutex CSingleton::m_lock;

#endif // Singleton_h__


  为了确保线程安全,我们需要对创建实例部分进行线程加锁,上述示例代码使用了双重检查的方式,既能够确保线程安全,也避免了由于每次加锁导致的性能消耗。如果使用下面的实现方式:

static CSingleton* GetInstance()
{
	m_lock.lock();
	if (m_pInstance == NULL)
	{
		m_pInstance = new CSingleton();
	}
	m_lock.unlock();
	return m_pInstance;
}

则每次调用GetInstance() 都需要加锁。




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

设计模式 - 单例模式(Singleton) C++实现

创建型模式 单例模式(Singleton) 意图 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) 原型模式(Prototype) 生成器模式(Build...

C++设计模式之三--Singleton单例模式

转自:http://www.cnblogs.com/wanggary/archive/2011/04/09/2010876.html   单例模式看起来也蛮简单的,就是在系统中只允许产生这个类的一...

C++设计模式之Singleton pattern(单例模式)

Singleton Pattern (单例模式) ---选自百度百科 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例...

设计模式(c++)笔记之三(Singleton单例模式)

一、简介     个人认为 Singleton 模式是设计模式中最为简单、最为常见、最容易实现,也是最应该熟悉和掌握的模式。且不说公司企业在招聘的时候为了考察员工对设计的了解和把握,考的最多的...

[C++设计模式] singleton 单例模式

这个设计模式主要目的是想在整个系统中只能出现一个类的实例。这样做当然是有必然的,比如你的软件的全局配置信息,或者是一个Factory,或是一个主控类,等等。你希望这个类在整个系统中只能出现一个实例。 ...

设计模式(C++版)之(Singleton)单例模式

单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式是一种对象创建型模式。 单例...

C++设计模式之单例模式(Singleton)

#include using namespace std; //程序在结束的时候,系统会自动析构所有的全局变量。 //事实上,系统也会析构所有的类的静态成员变量,就像这些静态成员也是全局变量一样 c...

c++ 设计模式(三)singleton 单例模式

单例模式的意图:保证一个类只有一个实例,并提供一个访问它的全局节点 使用性:             当类只能一个实例而且客户可以从从一个周所周知的访问点访问它           ...

设计模式C++之三(Singleton单例模式)

单例模式看起来也蛮简单的,就是在系统中只允许产生这个类的一个实例,既然这么简单,就直接贴代码了。更详细的内容及说明可以参考原作者博客:cbf4life.cnblogs.com。 3.1.解释 ma...

【一】设计模式——单例模式(Singleton Pattern)

设计模式——单例模式 简单快捷的了解设计模式
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)