关于栈上的单体结构
2015-09-24 11:00
751 查看
class createFun
{
public :
virtual int * create(){return new int;}
};
我定义了这样一个对象,如果希望这个对象实现一个单体模式,那么常用的就是在堆上构建,如:在内部这么写
class createFun
{
public :
static createFun* _instance(){
static createFun* s_instance = null;
if(!s_instance)
s_instance = new createFun;
return s_instance;
}
static int * create(){return new int;}
};
调用时可以这样 createFun::_instance()->[b]create();[/b]
[b]在全局架构这样写是可以的,但是如果我希望在局部构建出一个单体,怎么办?[/b]
static 定义的全局变量只能在定义的地方使用,可以起到保护作用,所以我们如果在局部构建单体(全局),如果直接写createFun
[b]g_Create;安全性就不太好了。[/b]
[b][b]当然我可以这么写:[/b][/b]
[b][b]namespace {[/b][/b]
static [b]createFun
g_Create;[/b]
[b][b]}[/b][/b]
[b][b]好了这样做可以实现局部全局变量,单从设计模式和实际使用,这样写不方便封装和管理,我们希望在对象内部定义一个单体的模型,可以这么写:[/b][/b]
[b]class createFun
{
public :
virtual int * create(){return new int;}[/b]
[b]static createFun s_singleCreate;
[/b]
};
createFun createFun::s_singleCreate;
//为方便子类的通用获取单体,可以写这样一个宏
#define BUILDER(F) & F::s_singleCreate
可以这样使用
createFun *a = BUILDER(createFun);
OK,我们也把这样一类对象指针放到一个数组或者容器中进行管理,读过设计模式应该可以理解。
{
public :
virtual int * create(){return new int;}
};
我定义了这样一个对象,如果希望这个对象实现一个单体模式,那么常用的就是在堆上构建,如:在内部这么写
class createFun
{
public :
static createFun* _instance(){
static createFun* s_instance = null;
if(!s_instance)
s_instance = new createFun;
return s_instance;
}
static int * create(){return new int;}
};
调用时可以这样 createFun::_instance()->[b]create();[/b]
[b]在全局架构这样写是可以的,但是如果我希望在局部构建出一个单体,怎么办?[/b]
static 定义的全局变量只能在定义的地方使用,可以起到保护作用,所以我们如果在局部构建单体(全局),如果直接写createFun
[b]g_Create;安全性就不太好了。[/b]
[b][b]当然我可以这么写:[/b][/b]
[b][b]namespace {[/b][/b]
static [b]createFun
g_Create;[/b]
[b][b]}[/b][/b]
[b][b]好了这样做可以实现局部全局变量,单从设计模式和实际使用,这样写不方便封装和管理,我们希望在对象内部定义一个单体的模型,可以这么写:[/b][/b]
[b]class createFun
{
public :
virtual int * create(){return new int;}[/b]
[b]static createFun s_singleCreate;
[/b]
};
createFun createFun::s_singleCreate;
//为方便子类的通用获取单体,可以写这样一个宏
#define BUILDER(F) & F::s_singleCreate
可以这样使用
createFun *a = BUILDER(createFun);
OK,我们也把这样一类对象指针放到一个数组或者容器中进行管理,读过设计模式应该可以理解。
相关文章推荐
- Java操作PDF之itext入门
- iOS---XCode7 + IOS9 问题及解决方案
- Java - What is difference between Enumeration and Iterator?
- JavaScript的DOM编程--08--复习
- intent
- 通过DBMS_SCHEDULER.SET_ATTRIBUTE可以指定执行任务的具体实例
- 公钥与私钥
- 关于指针的三个容易弄混淆的概念及发散
- equals与==的区别。
- 安卓Build中的makefile调用流程
- 日志框架Nlog之将日志输出到文件
- javascript之查找数组中最小/最大的数
- 传感器 - 摇一摇
- STL之七:STL各种容器的使用时机详解
- 单例
- MFC/VC中当鼠标经过按钮等控件时出现文字提示功能
- Android开发——初探Android 6.0 中新的新技术
- hibernate中元数据ClassMetadata用法及原理
- Perl数组去除重复元素
- 150924-还是起得来床的好-HTML(CSS)