您的位置:首页 > 其它

关于栈上的单体结构

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,我们也把这样一类对象指针放到一个数组或者容器中进行管理,读过设计模式应该可以理解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: