为什么要定义一个类的全局的静态的对象?为什么这么做了,有人知道吗?

chenxidu 2008-08-04 02:20:42


在cpp文件的外面定义一个:
static A a;\

在一个接口函数里面这样做:
A* A::GetInterface()
{
return &a;
}

然后在其他的类里面这样运用:
A *sc = A::GetInterface();


然后就可以直接使用这个sc指针了,这样做的好处是什么了?为什么要这样做了?
...全文
181 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuhaozx 2008-08-04
  • 打赏
  • 举报
回复
1、保证实例的唯一性
haosuai 2008-08-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 chenxidu 的回复:]
那问问大家,下面这样的做法是什么设计模式了?就是用别的类的指针类实例化一个类的对象
我觉得这里也有学问

gCharInst *main = cc->m_MainPlayer.m_pInst;
gCharInstAct mainAct(main);
[/Quote]
你这个说的不清楚,gCharInstAct和gCharInst的关系,cc的类型等。
coverallwangp 2008-08-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 chenxidu 的回复:]
那问问大家,下面这样的做法是什么设计模式了?就是用别的类的指针类实例化一个类的对象
我觉得这里也有学问

gCharInst *main = cc->m_MainPlayer.m_pInst;
gCharInstAct mainAct(main);
[/Quote]

是用子类的指针来实例化父类的对象吗?
chenxidu 2008-08-04
  • 打赏
  • 举报
回复
自己定
chenxidu 2008-08-04
  • 打赏
  • 举报
回复
那问问大家,下面这样的做法是什么设计模式了?就是用别的类的指针类实例化一个类的对象
我觉得这里也有学问

gCharInst *main = cc->m_MainPlayer.m_pInst;
gCharInstAct mainAct(main);
fenggu_xt 2008-08-04
  • 打赏
  • 举报
回复
好好学习。。。。。
coverallwangp 2008-08-04
  • 打赏
  • 举报
回复
设计模式中的单例模式

在这种设计模式中,类的构造函数是私有的,外部不能直接构造该类的对象。
只能通过该类的接口(函数)得到该类的对象,如:A::GetInterface();

所以在类中必须定义一个全局的static的该类的对象,让接口可以返回这个对象一供外部使用。

这样做的好处就是可以保证该类的对象有且只有一个,例如打印机,如果只有一台打印机,那你不能构造出两个打印机的对象。


具体的好处你可以看看设计模式。
  • 打赏
  • 举报
回复
看设计模式,单件。
会告诉你为啥会有这东西。
至于实现有多种方法,这只是其中的一种。
chenxidu 2008-08-04
  • 打赏
  • 举报
回复
哪位高手能多介绍介绍这种方法吗?不胜感激
yeliguo12345 2008-08-04
  • 打赏
  • 举报
回复
不懂,学习
ljosy 2008-08-04
  • 打赏
  • 举报
回复
可以看成是一个单例模式,static A a;这句话不管类被实例多少次,a只被分配和初始化一次,上面这个例子就是所有调用GetInterface();
这个方法的代码所用的都是一个相同的实例
  • 打赏
  • 举报
回复
单件模式

使用方便
BluntBlade 2008-08-04
  • 打赏
  • 举报
回复
单例模式,Singleton。

64,670

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧