免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1895 | 回复: 3
打印 上一主题 下一主题

关于单体对象的问题(SingletonObject) 在线等~~~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-08 15:04 |只看该作者 |倒序浏览
定义了一个单体对象,第一次Instance()时,返回的地址是0x00000038(假设是这样),这时对单体对象进行初始化操作,为数据成员进行赋值。当我在其它地方用这个单体对象时,数据成员的值就“丢”了,成了我定义的空(定义的枚举E_Null),这时再查单体对象的地址,成了0x00000040了,明显不对,可是成员函数调用却没有问题,不知有高手知道是什么原因吗?
还有,我对指针的保存,用了boost库的shared_ptr<T>
请指教!!
谢谢!!
在线等~~~

论坛徽章:
0
2 [报告]
发表于 2005-12-08 15:25 |只看该作者

  1. class SingletonObj
  2. {
  3. public:
  4.     static SingletonObj* getInstance();
  5.     static void release();
  6. private:
  7.     //把它定义成不可靠贝 不可赋值  只能从单一点获取
  8.     SingletonObj()
  9.     {}
  10.     SingletonObj(const SingletonObj& another)
  11.     {
  12.     }
  13.    
  14.     SingletonObj& operator=(const SingletonObj& another)
  15.     {
  16.      }
  17.     static SingletonObj* obj_;
  18. };

  19. SingletonObj* SingletonObj::obj_ = NULL;

  20. SingletonObj* SingletonObj::getInstance()
  21. {
  22.     if (obj_ == NULL)
  23.         obj  = new SingletonObj;
  24.     return obj;                            //确保它是唯一的。
  25. }

  26. void SingletonObj::release()
  27. {
  28.     if (obj_ != NULL)
  29.     {
  30.          delete obj_;
  31.          obj_ = NULL;
  32.     }
  33. }
复制代码


我对指针的保存,用了boost库的shared_ptr<T>

记得IBM的编码规范里面有一条,对于类方法,只通过类名来调用。

所以你要获得指针时。
只需要通过SingletonObj::getInstance()获得就可以了。没有必要再用什么share_ptr<T>,这个模板在我的印象里是实现了所有权转移功能的,记不大清楚了。

要释放时调用SingletonObj::release()就可以了。

不知道你是出于什么目的来给一个单件实例的指针加这样一个包装。

论坛徽章:
0
3 [报告]
发表于 2005-12-08 15:54 |只看该作者
谢谢了!

论坛徽章:
0
4 [报告]
发表于 2005-12-08 15:55 |只看该作者
晕……用了 Singleton 就不要用 shared_ptr 了……因为是单体对象,不会有多个副本产生,因此它占用的内存是否释放都不属于内存泄漏(不具有积累性);而且可以通过使用 static 变量作为实际变量的方法在程序退出的时候调用析构函数。通常而言,单体对象的生命周期取决于这个单体对象的角色与整个系统的关系,而不是取决于使用者的状态(好比,用一个单体对象描述系统打印机队列,绝不能因为某个时刻所有程序都不使用打印机而将队列彻底关闭吧)。

to 楼上:所有权转移的是 std::auto_ptr,不是 boost::shared_ptr 。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP