变态的static,这个用法在实际应用中有没有意义?

libinfei8848 2010-11-03 10:07:07

//见过比较变态的static用法

#include <iostream>
class egg
{
private:
static egg e;
int i;
egg(int i) : i(i){};

public:
static egg* Instance(){return &e;}
int GetVal(){return i;}
};

egg egg::e(47);
int main()
{
cout << egg::Instance()->GetVal() << endl;
getchar();
return 0;
}
...全文
286 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
chelp 2011-09-28
  • 打赏
  • 举报
回复
单例模式!
jikeyuan1 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lixianmin 的回复:]

这样做没有问题啊, 只是一种单态的实现而已, 楼主所认为的更有意义的想法是什么, 说出来听听
[/Quote]
……
Jales 2010-11-05
  • 打赏
  • 举报
回复
典型单例模式,这也算是正常的运用了,建议你多看看其他的代码
CodeCaptain 2010-11-05
  • 打赏
  • 举报
回复
楼主如果有问题的话自己应该对C++做一些深入的了解和理解,设计模式可以多做了解,如果基础不够涉及到涉及模型也是将无果!
CodeCaptain 2010-11-05
  • 打赏
  • 举报
回复
这个就是简单的单实例模型啊,不了解自己在项目里面跟踪下看看,不是什么变态的问题,不要乱说哦!
wind_breez 2010-11-05
  • 打赏
  • 举报
回复
单例模式!
hslinux 2010-11-04
  • 打赏
  • 举报
回复
1L被CSDN吃了。
dooX8086 2010-11-04
  • 打赏
  • 举报
回复
单件模式 在 MVC 结构开发中,首当其冲

module = xxxxxx.getInstance();

以数据为事件驱动更新各views
libinfei8848 2010-11-04
  • 打赏
  • 举报
回复
再顶一次,欢迎大家再各抒己见
ForestDB 2010-11-03
  • 打赏
  • 举报
回复
1L不见了觉得很BT,其它的还好。
sunloverain2 2010-11-03
  • 打赏
  • 举报
回复
这种做法存在一定意义,当然是在单线程情况下,如果多线程的话恐怕这个单件模式就不行了
gules 2010-11-03
  • 打赏
  • 举报
回复
这实际上是用C++实现单件模式时的一种实作手法(与Meyers单件类似,只不过是全局类静态,而不是局部静态,初始化点不一样),如下:

#include <iostream>
class egg
{
private:
int i;
egg(int i) : i(i){};

public:
static egg& Instance(
{
static egg e(47);
return e;
}
int GetVal(){return i;}
};

int main()
{
cout << egg::Instance().GetVal() << endl;
getchar();
return 0;
}
sbdt123 2010-11-03
  • 打赏
  • 举报
回复
有用,只有真正用到才感到他的用处
luciferisnotsatan 2010-11-03
  • 打赏
  • 举报
回复
单例模式的一种实现方法
lixianmin 2010-11-03
  • 打赏
  • 举报
回复
这样做没有问题啊, 只是一种单态的实现而已, 楼主所认为的更有意义的想法是什么, 说出来听听
王旺旺旺 2010-11-03
  • 打赏
  • 举报
回复
Singleton模式, Modern C++ design中有对此模式的详细论述.
無_1024 2010-11-03
  • 打赏
  • 举报
回复
用处还是有的 申请静态变量
在函数的返回类型前加上static关键字,函数即被定义为静态函数。静态函数与普通函数不同,它只能在声明它的文件当中可见,不能被其它文件使用。
未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化);   静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的
静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化
对于非静态数据成员,每个类对象都有自己的拷贝。而静态数据成员被当作是类的成员。无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一份拷 贝,由该类型的所有对象共享访问。也就是说,静态数据成员是该类的所有对象所共有的。对该类的多个对象来说,静态数据成员只分配一次内存,供所有对象共 用。所以,静态数据成员的值对每个对象都是一样的,它的值可以更新;   静态数据成员存储在全局数据区。静态数据成员定义时要分配空间,所以不能在类声明中定义。在Example 5中,语句int Myclass::Sum=0;是定义静态数据成员;
Defonds 2010-11-03
  • 打赏
  • 举报
回复
是像单例。
qq120848369 2010-11-03
  • 打赏
  • 举报
回复
就和单例模式一样一样的....就是感觉这个构造函数和这么一个对象之间的关系,很奇妙的权限.
无尽大海 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ouyh12345 的回复:]
有意义
[/Quote]等下文。。。
加载更多回复(9)

64,654

社区成员

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

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