青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Error

C++博客 首頁 新隨筆 聯(lián)系 聚合 管理
  217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks
之前自己設(shè)計(jì)Ref類型遇到new出來的地址,和Ref的this指針一致的情況,soui的這套做法一定程度避免了
如果有普通的單根繼承直接使用: public 
TObjRefImpl<IRef>
如果是多根繼承可以指定析構(gòu)類型 :public TObjRefImpl2<TDeleteType>
但是多重繼承兩個(gè)Ref類還是沒有解決,原則上應(yīng)該勁量不再非接口是上使用多重繼承


  1
 template<class T>
  2 class TObjRefImpl :  public T
  3 {
  4 public:
  5     TObjRefImpl():m_cRef(1)
  6     {
  7     }
  8 
  9     virtual ~TObjRefImpl(){
 10     }
 11 
 12     //!添加引用
 13     /*!
 14     */
 15     virtual long AddRef()
 16     {
 17         return InterlockedIncrement(&m_cRef);
 18     }
 19 
 20     //!釋放引用
 21     /*!
 22     */
 23     virtual long Release()
 24     {
 25         long lRet = InterlockedDecrement(&m_cRef);
 26         if(lRet==0)
 27         {
 28             OnFinalRelease();
 29         }
 30         return lRet;
 31     }
 32 
 33     //!釋放對(duì)象
 34     /*!
 35     */
 36     virtual void OnFinalRelease()
 37     {
 38         delete this;
 39     }
 40 protected:
 41     volatile LONG m_cRef;
 42 };
 43 
 44 template<class T,class T2>
 45 class TObjRefImpl2 :  public TObjRefImpl<T>
 46 {
 47 public:
 48     virtual void OnFinalRelease()
 49     {
 50         delete static_cast<T2*>(this);
 51     }
 52 };
 53 
 54 //CAutoRefPtr provides the basis for all other smart pointers
 55 template <class T>
 56 class CAutoRefPtr
 57 {
 58 public:
 59     CAutoRefPtr() throw()
 60     {
 61         p = NULL;
 62     }
 63     CAutoRefPtr(_In_ int nNull) throw()
 64     {
 65         (void)nNull;
 66         p = NULL;
 67     }
 68     CAutoRefPtr(_In_opt_ T* lp) throw()
 69     {
 70         p = lp;
 71         if (p != NULL)
 72         {
 73             p->AddRef();
 74         }
 75     }
 76 
 77     CAutoRefPtr(const CAutoRefPtr & src) throw()
 78     {
 79         p=src.p;
 80         if(p)
 81         {
 82             p->AddRef();
 83         }
 84     }
 85 
 86     ~CAutoRefPtr() throw()
 87     {
 88         if (p)
 89         {
 90             p->Release();
 91         }
 92     }
 93 
 94     T* operator->() const throw()
 95     {
 96         return p;
 97     }
 98 
 99     operator T*() const throw()
100     {
101         return p;
102     }
103     T& operator*() const
104     {
105         return *p;
106     }
107     //The assert on operator& usually indicates a bug.  If this is really
108     //what is needed, however, take the address of the p member explicitly.
109     T** operator&() throw()
110     {
111         SASSERT(p==NULL);
112         return &p;
113     }
114     bool operator!() const throw()
115     {
116         return (p == NULL);
117     }
118     bool operator<(_In_opt_ T* pT) const throw()
119     {
120         return p < pT;
121     }
122     bool operator!=(_In_opt_ T* pT) const
123     {
124         return !operator==(pT);
125     }
126     bool operator==(_In_opt_ T* pT) const throw()
127     {
128         return p == pT;
129     }
130 
131     T* operator=(_In_opt_ T* lp) throw()
132     {
133         if(*this!=lp)
134         {
135             if(p)
136             {
137                 p->Release();
138             }
139             p=lp;
140             if(p)
141             {
142                 p->AddRef();
143             }
144         }
145         return *this;
146     }
147 
148     T* operator=(_In_ const CAutoRefPtr<T>& lp) throw()
149     {
150         if(*this!=lp)
151         {
152             if(p)
153             {
154                 p->Release();
155             }
156             p=lp;
157             if(p)
158             {
159                 p->AddRef();
160             }
161         }
162         return *this;    
163     }
164 
165     // Release the interface and set to NULL
166     void Release() throw()
167     {
168         T* pTemp = p;
169         if (pTemp)
170         {
171             p = NULL;
172             pTemp->Release();
173         }
174     }
175 
176     // Attach to an existing interface (does not AddRef)
177     void Attach(_In_opt_ T* p2) throw()
178     {
179         if (p)
180         {
181             p->Release();
182         }
183         p = p2;
184     }
185     // Detach the interface (does not Release)
186     T* Detach() throw()
187     {
188         T* pt = p;
189         p = NULL;
190         return pt;
191     }
192     HRESULT CopyTo(_Deref_out_opt_ T** ppT) throw()
193     {
194         if (ppT == NULL)
195             return E_POINTER;
196         *ppT = p;
197         if (p)
198         {
199             p->AddRef();
200         }
201         return S_OK;
202     }
203 
204 protected:
205     T* p;
206 };
struct IObjRef
{
    virtual long AddRef() = 0;

    virtual long Release() = 0;
    
    virtual void OnFinalRelease() =0;
};


posted on 2015-05-14 10:07 Enic 閱讀(361) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 從零開始寫棋牌游戲平臺(tái)
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            中文高清一区| 午夜精品久久久久久99热软件| 欧美刺激性大交免费视频| 日韩午夜黄色| 亚洲作爱视频| 午夜精品久久久久久久蜜桃app| 亚洲欧美视频一区| 久久人人爽人人爽| 免费短视频成人日韩| 欧美成人一区二区三区在线观看| 欧美自拍偷拍| 亚洲一区二区日本| 欧美精品一级| 狠狠干狠狠久久| 亚洲欧美第一页| 夜夜嗨一区二区三区| 欧美日本国产精品| 亚洲最新视频在线播放| 麻豆成人在线播放| 葵司免费一区二区三区四区五区| 免费在线播放第一区高清av| 欧美日韩国产三级| 亚洲国产精品热久久| 久久成人18免费网站| 一本色道久久88亚洲综合88| 欧美成人性生活| 久久久精品久久久久| 欧美亚一区二区| 国产一区二区三区的电影 | 国产一区二区黄色| 裸体女人亚洲精品一区| 久久综合导航| 一区福利视频| 欧美一级二级三级蜜桃| 亚洲欧美日韩精品久久久久| 国产伦理一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久久久久综合网天天| 欧美日韩一区免费| 欧美成人官网二区| 另类春色校园亚洲| 亚洲精品免费网站| 欧美va亚洲va香蕉在线| 小嫩嫩精品导航| 国产乱码精品一区二区三区五月婷 | 蜜桃av一区二区在线观看| 国产九九精品| 久久久中精品2020中文| 久久国产毛片| 亚洲精选中文字幕| 国产日本欧美一区二区三区在线 | 欧美在线影院在线视频| 亚洲免费一在线| 国产日韩视频| 亚洲国产精品一区二区www在线| 亚洲欧美制服另类日韩| 亚洲大片在线| 亚洲视频在线观看一区| 国内揄拍国内精品少妇国语| 欧美国产综合一区二区| 欧美日韩妖精视频| 久久琪琪电影院| 国产精品国内视频| 欧美粗暴jizz性欧美20| 国产精品一区免费视频| 一本久道久久综合中文字幕| 欧美三级网页| 亚洲一区二区三区涩| 一区二区三区福利| 欧美丰满高潮xxxx喷水动漫| 国产日韩在线一区二区三区| 亚洲精选在线| 欧美va天堂在线| 亚洲欧美日韩在线观看a三区| 久久一本综合频道| 国产伦精品一区二区三区照片91 | 亚洲精品少妇网址| 欧美一级成年大片在线观看| 亚洲主播在线观看| 欧美一激情一区二区三区| 99riav国产精品| 亚洲国产综合在线看不卡| 国产精品啊啊啊| 久久不见久久见免费视频1| 一区二区av在线| 欧美国产视频在线| 99re66热这里只有精品4| 快播亚洲色图| 亚洲欧美色婷婷| 国产精品久久国产三级国电话系列 | 亚洲天堂网站在线观看视频| 久久精品91| 亚洲高清不卡| 老牛国产精品一区的观看方式| 欧美影院成年免费版| 欧美日韩在线看| 日韩亚洲欧美成人一区| 亚洲一区久久久| 亚洲欧美美女| 欧美日韩国产综合一区二区| 欧美高清在线| 欧美va亚洲va日韩∨a综合色| 欧美日韩亚洲综合一区| 一区二区三区www| 欧美专区第一页| 国产亚洲综合在线| 西瓜成人精品人成网站| 另类综合日韩欧美亚洲| 激情六月婷婷久久| 久久视频国产精品免费视频在线| 国外成人网址| 欧美性色视频在线| 欧美成人激情在线| 亚洲欧美美女| 一区二区三区欧美视频| 91久久精品国产91久久性色tv | 欧美调教vk| 欧美午夜电影网| 欧美网站在线| 国产精品私人影院| 国产欧美 在线欧美| 国产精品啊啊啊| 国产精品vvv| 国产尤物精品| 亚洲欧洲精品一区二区三区不卡 | 欧美一级大片在线观看| 亚洲欧美中文另类| 久久性天堂网| 欧美精品自拍| 国产日韩欧美在线视频观看| 韩日视频一区| 亚洲一级高清| 久久亚洲国产成人| 亚洲免费观看在线视频| 久久爱www| 欧美日韩精品二区| 在线观看亚洲| 性色一区二区三区| 亚洲日本中文| 久久久久久久久蜜桃| 欧美人妖在线观看| 永久免费毛片在线播放不卡| 欧美性理论片在线观看片免费| 小黄鸭精品aⅴ导航网站入口| 久久久久久成人| 国产精品毛片va一区二区三区| 一区一区视频| 久久久久欧美精品| 亚洲欧美日韩国产中文在线| 欧美精品在线播放| 亚洲第一精品夜夜躁人人爽 | 永久域名在线精品| 欧美在现视频| 一本色道**综合亚洲精品蜜桃冫| 久久久久免费| 精品av久久久久电影| 久久国产欧美精品| 午夜激情一区| 激情综合激情| 欧美va天堂va视频va在线| 久久精品国产2020观看福利| 国内精品一区二区三区| 久色成人在线| 欧美精品一区二区久久婷婷| 中日韩男男gay无套| 亚洲男人的天堂在线观看| 国产视频精品va久久久久久| 玖玖玖国产精品| 欧美高清在线| 久久福利电影| 欧美黄色日本| 欧美一级片久久久久久久| 亚洲欧美在线磁力| 亚洲美女色禁图| 欧美一区2区三区4区公司二百| 在线观看av不卡| 亚洲一二三区在线观看| 在线不卡视频| 午夜精品久久久久久久蜜桃app| 影音先锋日韩资源| 一区二区欧美激情| 激情婷婷欧美| 午夜欧美电影在线观看| 日韩一级精品| 西瓜成人精品人成网站| 美女精品在线观看| 欧美一区免费| 欧美三日本三级少妇三2023| 欧美日韩一区二区三区在线 | 久久国产福利国产秒拍| 亚洲一区二区三区精品在线| 老司机午夜精品视频| 欧美在线观看日本一区| 欧美日韩亚洲高清一区二区| 欧美国产日产韩国视频| 国产欧美日韩综合| 中日韩男男gay无套| 午夜影院日韩| 国产精品高潮呻吟久久| 在线亚洲精品福利网址导航|