游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3059|回复: 4

一个奇怪的singleton问题,有兴趣的来聊聊

[复制链接]

35

主题

141

帖子

157

积分

注册会员

Rank: 2

积分
157
发表于 2010-2-18 10:29:00 | 显示全部楼层 |阅读模式
我在编程精粹上看见了一个这样的singleton模式,但是我在使用的时候出了个问题,故和大家请教下,代码入下
#ifndef        __SINGLETON_H__
#define        __SINGLETON_H__

#include  "common.h"

template <typename T>
class CSingleton
{
public:
    CSingleton()
  {
    assert( !m_pSingleton );
        int offset = (int)(T*)1 - (int)(CSingleton <T>*)(T*)1;
        m_pSingleton = (T*)((int)this + offset);
  }
    virtual  ~CSingleton()
  {
    Assert( !m_pSingleton, "singleton is NULL POINTOR");
        m_pSingleton = 0;
    }
  void  SetObj(T* obj)
  {
    m_pSingleton = obj;
  }
    static T*  GetObj()
  {  
    return  m_pSingleton;
  }
  private:
    static  T*  m_pSingleton;
};

template <typename T> T*  CSingleton <T>::m_pSingleton  =  0;
//
class CGameApp:public CSingleton<CGameApp>
{
    public:
      CGameApp();
      virtual ~CGameApp();
   
      virtual bool InitApplication(....);
   private:
      .......
}
//
#define  g_pGameApp  CGameApp::GetObj() //为了方便使用

class CGame:public CGameApp
{
    public:
      CGame();
      ~virtual CGame();

      virtual bool InitApplication(....)
    private:
      ....
}

#endif
//
我在主程序中 那么使用
CGame  game;
按照我的理解g_pGameApp应该是指向game中的CGameApp部分,因为只要CGameApp对象建立,那么CSingleton的m_pSingleton就已经自动的指向了它了(CSingleton的构造函数的功能就是这样的,计算offset是害怕在强制转换的时候指针发生偏移),game在创建的时候他自己内部CGameApp部分自动创建(CGame继承了CGameApp),g_pGameApp就指向了game中的CGameApp了,但是我在调试的时候,我的程序告诉我g_pGameApp为NULL,不知道是为什么,请大家帮帮,谢谢了











1

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2010-2-18 17:58:00 | 显示全部楼层

Re:一个奇怪的singleton问题,有兴趣的来聊聊

这里回复过你了,check 一下“GameRes游戏开发论坛 » 游戏程序设计综合区 » 程序综合、DirectX”

35

主题

141

帖子

157

积分

注册会员

Rank: 2

积分
157
 楼主| 发表于 2010-2-19 14:51:00 | 显示全部楼层

Re:一个奇怪的singleton问题,有兴趣的来聊聊

呵呵,谢谢你哈

1

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2010-2-19 17:18:00 | 显示全部楼层

Re:一个奇怪的singleton问题,有兴趣的来聊聊

不谢,能帮到你是我的快乐。

6

主题

379

帖子

379

积分

中级会员

Rank: 3Rank: 3

积分
379
QQ
发表于 2010-3-5 14:24:00 | 显示全部楼层

Re:一个奇怪的singleton问题,有兴趣的来聊聊

看到你们互相帮助很快乐。^_^
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-12 18:17

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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