Be MySelf                                                    
 

 

日志更新

最新评论

留言板

链接

Blog信息





Singleton 的C++实现
haosheng 发表于 2006/8/10 13:14:00

Singleton

 

Introduction

我们常常想让某个类只实例化一次,这个时候Singleton就能派上用场。一般来说当对象构建花费的代价相对比较大,使用又比较频繁的时候,我们可以使用Singleton模式,比如我们常用的工厂(Factory)类。

C++ Implementation

对于C++来说可以有两种方式来实现:

1、  使用一个私有的静态成员。

2、  在方法内部使用局部静态变量。

Environment

Windows XP ProfessionalVisual C++2005

Method1

#pragma once

 

class ObjectFactory

{

private:

       ObjectFactory(void);

public:

       static ObjectFactory* GetInstance();

       ~ObjectFactory(void);

private:

       static ObjectFactory* instance;

};

////////////////////////////////////////////////////

 

#i nclude "StdAfx.h"

#i nclude "ObjectFactory.h"

 

ObjectFactory* ObjectFactory::instance=NULL;

ObjectFactory::ObjectFactory(void)

{

}

 

ObjectFactory::~ObjectFactory(void)

{

}

 

ObjectFactory* ObjectFactory::GetInstance()

{

       if ( instance == NULL )

              instance = new ObjectFactory();

       return instance;

}

 

Method2

#pragma once

 

class ObjectFactoryPri

{

private:

       ObjectFactoryPri(void);

public:

       ~ObjectFactoryPri(void);

       static ObjectFactoryPri* GetInstance();

};

////////////////////////////////////////////////////

#i nclude "StdAfx.h"

#i nclude "ObjectFactoryPri.h"

 

ObjectFactoryPri::ObjectFactoryPri(void)

{

}

 

ObjectFactoryPri::~ObjectFactoryPri(void)

{

}

ObjectFactoryPri* ObjectFactoryPri::GetInstance()

{

       static ObjectFactoryPri* instance = NULL;

       if (instance == NULL )

              instance = new ObjectFactoryPri();

       return instance;

}

How to Use

#i nclude "stdafx.h"

#i nclude "ObjectFactory.h"

#i nclude "ObjectFactoryPri.h"

 

 

int _tmain(int argc, _TCHAR* argv[])

{

       ObjectFactory* pOF = ObjectFactory::GetInstance();

       ObjectFactoryPri* pOFP = ObjectFactoryPri::GetInstance();

       return 0;

}

Postscript


阅读全文 | 回复(0) | 引用通告 | 编辑 | 收藏该日志
 


发表评论:

    昵称:
    密码:
    主页:
    标题: