简介
单例模式只允许一个类有一个实例化。其应用比较广泛,很多情况下我们只需要一个对象。主要要点是:构造函数私有,包含指向该类的静态成员指针,实例化的静态函数。实现时为了保证只有一个实例,需要使用锁保证同步,或者初始化全局变量等技术保证唯一实例。我们只实现使用锁的方法。
UML类图
示例
单例模式在实际应用中很常见,很多时候我们只需要实例化一个对象出来。
单例类,product.h
#ifndef PRODUCT_H
#define PRODUCT_H
#include "boost/thread/mutex.hpp"
#include "boost/thread/shared_mutex.hpp"
class CProduct
{
public:
static CProduct* GetInstance()
{
if(m_pProduct == NULL)
{
boost::shared_lock<boost::shared_mutex> lock(m_mutexProduct);
if(m_pProduct == NULL)
m_pProduct = new CProduct;
}
return m_pProduct;
}
private:
CProduct(){};
private:
static CProduct* m_pProduct;
static boost::shared_mutex m_mutexProduct;
};
#endif
客户端调用,main.cpp
#include "product.h"
#define SAFE_DELETE(p) if(p){delete (p); (p) = NULL;}
boost::shared_mutex CProduct::m_mutexProduct;
CProduct* CProduct::m_pProduct = NULL;
int main(int argc, char* argv[])
{
CProduct* pProduct = CProduct::GetInstance();
SAFE_DELETE(pProduct)
return 0;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。