游戏开发论坛

 找回密码
 立即注册
搜索
查看: 7347|回复: 25

??????????????????,??????

[复制链接]

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
发表于 2011-5-21 23:15:00 | 显示全部楼层 |阅读模式
????????????????????????????????????????????????????????.
??????????????????????????,?????????????,???????????
(?????????????????,??????,???????????.)

2

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2011-5-22 03:03:00 | 显示全部楼层

Re:??????????????????,??????

IDirect3DTexture ? com ???
??? AddRef ? Release
????????????? AddRef
??????? Release
com ?????????

11

主题

1238

帖子

1782

积分

金牌会员

Rank: 6Rank: 6

积分
1782
 楼主| 发表于 2011-5-22 10:16:00 | 显示全部楼层

Re:??????????????????,??????

?????~~?????~~

1

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2011-5-25 16:47:00 | 显示全部楼层

Re:??????????????????,??????

??????????????????????????????smart_ptr???

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2011-5-25 17:03:00 | 显示全部楼层

Re: Re:??????????????????,????

??b??: Re:??????????????????,????????????

??????????????????????????????smart_ptr???


???????????????

11

主题

1238

帖子

1782

积分

金牌会员

Rank: 6Rank: 6

积分
1782
 楼主| 发表于 2011-5-25 18:07:00 | 显示全部楼层

Re:??????????????????,??????

???????????????? Boost?? STL?? ??????

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2011-5-25 18:43:00 | 显示全部楼层

Re: Re:??????????????????,????

????: Re:??????????????????,????????????

???????????????? Boost?? STL?? ??????


???????


  1. //-------------------------------------------------------------------
  2. // CZSharePtr ????
  3. //-------------------------------------------------------------------
  4. enum EMEMORYTYPE
  5. {
  6.         MT_NEW        = 0,
  7.         MT_MALLOC        = 1,
  8. };

  9. template <typename T, EMEMORYTYPE type>
  10. class CZSharePtr
  11. {
  12. public:
  13.         CZSharePtr(int null=0) : m_pPoint(NULL), m_pRefCount(NULL) {}
  14.         ~CZSharePtr()        {        Release();        }

  15.         void Release()
  16.         {
  17.                 if (m_pPoint == NULL)        return;
  18.                 if (--(*m_pRefCount) == 0)
  19.                 {
  20.                         switch (type)
  21.                         {
  22.                         case MT_NEW:
  23.                                 delete m_pPoint, m_pPoint=NULL;
  24.                                 delete m_pRefCount, m_pRefCount=NULL;
  25.                                 break;
  26.                         case MT_MALLOC:
  27.                                 free(m_pPoint), m_pPoint=NULL;
  28.                                 delete m_pRefCount, m_pRefCount=NULL;
  29.                                 break;
  30.                         }
  31.                 }
  32.         }

  33.         void operator = (T* ptr)
  34.         {
  35.                 if (ptr == NULL)        return;
  36.                 if (m_pRefCount == NULL)        m_pRefCount = new int(1);
  37.                 else                        (*m_pRefCount)++;
  38.                 m_pPoint = ptr;
  39.         }

  40.         void operator = (const CZSharePtr& src)
  41.         {
  42.                 m_pPoint=src.m_pPoint, m_pRefCount=src.m_pRefCount;
  43.                 (*m_pRefCount)++;
  44.         }

  45.         bool operator == (T* src)        {        return m_pPoint==src;                }
  46.         T* GetPoint()                {        return m_pPoint;        }

  47.         template <typename type>
  48.         operator type* ()                {        return (type*)m_pPoint;        }

  49. private:
  50.         T*                m_pPoint;
  51.         int*        m_pRefCount;        // ?????
  52. };
复制代码


????????????????????

11

主题

1238

帖子

1782

积分

金牌会员

Rank: 6Rank: 6

积分
1782
 楼主| 发表于 2011-5-25 19:27:00 | 显示全部楼层

Re: ??????????????????,?????

[em4].........??????????????????????????.............




  1. template <typename T, EMEMORYTYPE type>
  2. class CZSharePtr
  3. {
  4. public:       
  5.         CZSharePtr(int null=0) : m_pPoint(NULL), m_pRefCount(NULL) {}
  6.         ~CZSharePtr()        {        Release();        }       

  7.         void Release()       
  8.         {               
  9.                 if (m_pPoint == NULL)       
  10.                         return;               
  11.                 if (--(*m_pRefCount) == 0)               
  12.                 {                       
  13.                         switch (type)                       
  14.                         {                       
  15.                         case MT_NEW:                               
  16.                                 delete m_pPoint, m_pPoint=NULL;
  17.                                 delete m_pRefCount, m_pRefCount=NULL;
  18.                                 break;                       
  19.                         case MT_MALLOC:                               
  20.                                 free(m_pPoint), m_pPoint=NULL;                               
  21.                                 delete m_pRefCount, m_pRefCount=NULL;                               
  22.                                 break;                       
  23.                         }               
  24.                 }       
  25.         }

  26.         void operator = (T* ptr)       
  27.         {               
  28.                 if (ptr == NULL)       
  29.                         return;               
  30.                 if (m_pRefCount == NULL)       
  31.                         m_pRefCount = new int(1);               
  32.                 else                       
  33.                         (*m_pRefCount)++;               
  34.                         m_pPoint = ptr;       
  35.         }

  36.         void operator = (const CZSharePtr& src)       
  37.         {               
  38.                 m_pPoint=src.m_pPoint, m_pRefCount=src.m_pRefCount;               
  39.                 (*m_pRefCount)++;       
  40.         }       

  41.         bool operator == (T* src)       
  42.         {       
  43.                 return m_pPoint==src;
  44.         }

  45.         T* GetPoint()               
  46.         {       
  47.                 return m_pPoint;
  48.         }

  49.         template <typename type>        operator type* ()               
  50.         {       
  51.                 return (type*)m_pPoint;
  52.         }

  53. private:       
  54.         T*                m_pPoint;        int*        m_pRefCount;        // ?????
  55. };

  56. class CTexture
  57. {
  58. public:
  59.         CTexture()
  60.         {
  61.                 cout << "Construct Texture " << this << endl;
  62.         }

  63.         ~CTexture()
  64.         {
  65.                 cout << "Destruct Texture " << this << endl;
  66.         }
  67. };


  68. // ???????
  69. {
  70.         CZSharePtr<CTexture, MT_NEW> texturePtr;
  71.         texturePtr = new CTexture();
  72.         texturePtr = texturePtr.GetPoint();
  73. }

  74. // pTextureA?pTextureB??????
  75. {
  76.         CZSharePtr<CTexture, MT_NEW> texturePtr;
  77.         CTexture * pTextureA = new CTexture();
  78.         CTexture * pTextureB = new CTexture();
  79.         texturePtr = pTextureA;
  80.         texturePtr = pTextureB;
  81. }

复制代码

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2011-5-25 19:55:00 | 显示全部楼层

Re: Re: ??????????????????,????

????: Re: ??????????????????,????????????

[em4].........??????????????????????????.............


[code]

template...


1??????new?malloc????
2??????????????????????????????????????
????????????????????????????????????????????????????0????
????

11

主题

1238

帖子

1782

积分

金牌会员

Rank: 6Rank: 6

积分
1782
 楼主| 发表于 2011-5-25 20:01:00 | 显示全部楼层

Re:??????????????????,??????

.......?????????????"??",??????????????,??????????,?????"??""??"???????????,???????,????????????.

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-7 22:29

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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