游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6296|回复: 11

[求助]静态指针所指的对象需不需要删除?

[复制链接]

17

主题

282

帖子

436

积分

中级会员

Rank: 3Rank: 3

积分
436
发表于 2008-8-12 18:19:00 | 显示全部楼层 |阅读模式
用singleton模式实现了一个类,在写析构函数的时候遇到了点问题

类的头文件

  1. class GamePainter
  2. {
  3. private:
  4.         static GamePainter* _instance;        //使用singleton模式

  5.         GamePainter();       
  6. public:
  7.         static GamePainter* Instance();
  8.         ~GamePainter();
  9. };
复制代码


cpp文件

  1. #include "GamePainter.h"

  2. GamePainter* GamePainter::_instance=0;        //lazy初始化

  3. GamePainter::GamePainter()
  4. {
  5.         _state = LogoState::Instance();  //这是某个singleton类的对象,在这里不关注
  6. }

  7. GamePainter::~GamePainter()
  8. {
  9.         if (_state)
  10.         {
  11.                 delete _state;
  12.                 _state = NULL;
  13.         }

  14.         if (_instance)
  15.         {
  16.                 delete _instance;  //一旦调用到这里,将递归的调用~GamePainter(),导致栈异常
  17.                 _instance = NULL;
  18.         }               
  19. }

  20. GamePainter* GamePainter::Instance()
  21. {
  22.         if (_instance == 0)
  23.         {
  24.                 _instance = new GamePainter();
  25.         }
  26.         return _instance;
  27. }
复制代码


那么_instance这个指针所指的对象究竟应该如何释放呢?

网上看了下,有人说可以干脆不用去释放,程序结束了资源也释放了,的确这个对象是存在于整个程序的生命周期的;
如果遇到某些情况需要释放的话,又该怎么做?

17

主题

282

帖子

436

积分

中级会员

Rank: 3Rank: 3

积分
436
 楼主| 发表于 2008-8-12 18:39:00 | 显示全部楼层

Re:[求助]静态指针所指的对象需不需要删除?

ps:

创建
GamePainter *g_pGamePainter;
g_pGamePainter = GamePainter::Instance();

销毁
delete g_pGamePainter;
g_pGamePainter = NULL;

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2008-8-14 02:32:00 | 显示全部楼层

Re:[求助]静态指针所指的对象需不需要删除?

可以参考OGRE里的单件,它需要你显式地new,这样你也可以从容地delete。它保证单件的唯一性靠得是assert。
这样的话,用起来十分灵活,可控性很强,可以有效地避免对象之间的依赖性对单件初始化和释放造成的影响,还可以避免多线程破坏单件的初始化。

几篇文章:
http://www.cppblog.com/ant/archive/2007/09/07/31445.html
http://www.cppblog.com/ant/archive/2007/09/07/31786.html
http://fsfoundry.org/codefreak/2006/05/05/is-your-singleton-broken
http://fsfoundry.org/codefreak/2007/12/12/say-no-to-singleton
http://fsfoundry.org/codefreak/2006/05/05/is-your-singleton-broken

17

主题

282

帖子

436

积分

中级会员

Rank: 3Rank: 3

积分
436
 楼主| 发表于 2008-8-15 21:12:00 | 显示全部楼层

Re:[求助]静态指针所指的对象需不需要删除?

谢谢ls 帮了很大的忙~~

0

主题

72

帖子

74

积分

注册会员

Rank: 2

积分
74
发表于 2008-8-16 16:00:00 | 显示全部楼层

Re:[求助]静态指针所指的对象需不需要删除?

论坛圣地出圣人,有个教主是能人;
一个大师在自夸,逗得大家笑哈哈;
游戏作了一飞机,不是黑屏就死机;
五星勋章刚发布,程序错误堵住路;
反恐前线才出窝,BUG竟比代码多;
嘲笑论坛C++,TV3D过家家;
自称显卡五千二,每秒桢数一两个;
自称多才会美工,巨龙画的像蜈蚣;
自称专业程序员,竟然不会C语言;
自称自己很耀眼,我看纯属不要脸;
自称老道会DOS,论坛高手恶心死;
自称打造半条命,TV3D辱使命;
自称就他做三国,拖拖控件干完活;
自称代码很高明,拖个控件不改名;
自称别人都不懂,一斤鼻血出鼻孔;
自称作品有N个,装完一个删一个;
自称猛男比成龙,其实就是一条虫;
自称身高一米八,其实是个癞蛤蟆;
别人开源行为好,他骂人家代码老;
别人讨论算法题,他竟没事跟你急;
别人代码水平高,他说别人到处抄;
别人发布新作品,大师骂完不过瘾;
别人代码效率高,他说别人全是抄;
使命召唤做马甲,满嘴狗屎死全家;
这种水平也上来,看得菜鸟乐开怀;
开个论坛撇VB,乌烟瘴气放狗屁;
白痴新浪还收录,毁三雷四笑破肚;
吃了熊心豹子胆,高手面前现现眼;
吃饱喝足没事干,论坛这里捣捣乱;
技术差劲见识短,自诩老大不要脸;
三国玉玺花十万,做个垃圾还扯淡;
做诗反击做诗人,毫不押韵恶心人;
自称VB做补丁,其实屙屎不擦腚;
游戏之家气死你,代表C+鄙视你;
中国足球不争气,就像教主做游戏;
满嘴口臭骂国足,星宿老仙是他徒;
技术不高还挺浪,满脸晦气猪狗相;
叫嚣VB做传奇,一语道破羞脸皮;
人身攻击不过瘾,人肉搜索恶心你;
自称领导常表扬,让你暖和就上炕;
TV3D没人捧,VB这里装骨鲠;
自称高中没毕业,数学从小没及格;
不知天高与地厚,游戏做的就是臭;
最后告你一句话,多养孩子少生猪!

5

主题

27

帖子

27

积分

注册会员

Rank: 2

积分
27
发表于 2008-8-17 15:28:00 | 显示全部楼层

Re:[求助]静态指针所指的对象需不需要删除?

顶上

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-8-19 16:18:00 | 显示全部楼层

Re:[求助]静态指针所指的对象需不需要删除?

帮楼上顶楼上的楼上!

2

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2008-8-19 18:29:00 | 显示全部楼层

Re: Re:[求助]静态指针所指的对象需不需要删除?

天下小米: Re:[求助]静态指针所指的对象需不需要删除?

帮楼上顶楼上的楼上!

我顶死你!论坛就是因为有你这种人渣才变得这么乱!

3

主题

137

帖子

151

积分

注册会员

Rank: 2

积分
151
QQ
发表于 2008-8-21 11:52:00 | 显示全部楼层

Re:[求助]静态指针所指的对象需不需要删除?

推荐你看《Modern c++ design》,里面有关于SingleTon模式的详细论述.包括你疑惑的资源泄露问题.

另外

if (_instance)       
{
    delete _instance;
    _instance = NULL;       
}
这种方式是不妥的.
对指针的判断,最好采用 if (p == NULL)来判断.
而 if(value) 是用来判断bool值的.

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2008-8-21 15:58:00 | 显示全部楼层

Re: Re:[求助]静态指针所指的对象需不需要删除?

骆驼祥子: Re:[求助]静态指针所指的对象需不需要删除?

推荐你看《Modern c++ design》,里面有关于SingleTon模式的详细论述.包括你疑惑的资源泄露问题.

另外

...

http://blog.csdn.net/wingfiring/archive/2007/05/17/1613822.aspx
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 14:28

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表