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

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>
            欧美日韩国产综合一区二区| 在线亚洲高清视频| 欧美sm极限捆绑bd| 玖玖玖免费嫩草在线影院一区| 久久精品亚洲| 美女网站在线免费欧美精品| 久久夜色精品国产噜噜av| 免费观看在线综合| 欧美日韩免费视频| 国产精品夜色7777狼人| 韩国在线一区| 伊人久久大香线| 欧美成人一区在线| 欧美一区午夜精品| 亚洲自拍偷拍网址| 亚洲国产成人高清精品| 亚洲黄页视频免费观看| 国产一区二区中文字幕免费看| 欧美黄免费看| 亚洲国产三级网| 亚洲在线成人精品| 香蕉久久夜色精品国产使用方法| 在线亚洲一区二区| 亚洲黑丝在线| 午夜精品一区二区在线观看| 国产精品久久97| 最新日韩中文字幕| 亚洲人成毛片在线播放女女| 亚洲免费福利视频| 欧美国产免费| 久久久久国产精品人| 欧美高清视频一区| 国产精品高清在线| 亚洲精品在线二区| 亚洲欧美日韩高清| 国产区亚洲区欧美区| 免费日韩av| 在线视频欧美精品| 欧美在线视频观看| 99精品免费| 久久av一区| 一区二区三区成人精品| 欧美在线视频观看| 亚洲午夜一级| 久久久久久噜噜噜久久久精品 | 欧美美女bb生活片| 久久国产高清| 日韩视频一区| 亚洲日韩欧美视频一区| 国产精品剧情在线亚洲| 亚洲视频在线看| 久久久久久亚洲精品不卡4k岛国| 亚洲国产精品嫩草影院| 日韩写真视频在线观看| 国产一区二区| 亚洲一级二级| 国产精品美女久久| 亚洲国产欧美一区| 国内偷自视频区视频综合| 亚洲精品自在久久| 欧美高清视频在线播放| 国产亚洲美州欧州综合国| 欧美视频中文字幕| 午夜精品久久久| 亚洲欧美日韩国产中文| 亚洲日本无吗高清不卡| 欧美色视频日本高清在线观看| 亚洲国产专区| 欧美成人午夜免费视在线看片 | 在线观看精品视频| 羞羞漫画18久久大片| 亚洲主播在线| 国产日韩欧美一区二区三区在线观看 | 久久www成人_看片免费不卡| 国产深夜精品| 美女脱光内衣内裤视频久久影院| 久久亚洲国产精品日日av夜夜| 国产婷婷一区二区| 乱中年女人伦av一区二区| 裸体歌舞表演一区二区| av成人天堂| 亚洲综合社区| 午夜精品久久久久久久99樱桃 | 欧美三区在线视频| 亚洲一区激情| 性一交一乱一区二区洋洋av| 在线看片欧美| 亚洲毛片网站| 国产一区激情| 亚洲国产精品热久久| 欧美午夜一区二区福利视频| 先锋影音网一区二区| 久久久999成人| 夜夜嗨av一区二区三区网页 | 欧美视频中文一区二区三区在线观看| 亚洲欧美日韩国产综合精品二区| 久久精品国产77777蜜臀 | 欧美成人一区二区三区| 欧美日韩视频在线一区二区| 欧美在线观看视频一区二区| 免费短视频成人日韩| 亚洲一区欧美| 麻豆免费精品视频| 欧美中文字幕精品| 欧美久久精品午夜青青大伊人| 欧美一级淫片播放口| 免费观看成人| 欧美一区二区在线免费观看 | 欧美一区二区三区视频免费| 亚洲美女色禁图| 久久av二区| 亚洲欧美视频一区| 欧美成人中文| 久久综合中文字幕| 国产精品免费观看在线| 91久久精品www人人做人人爽 | 久久躁日日躁aaaaxxxx| 欧美色大人视频| 欧美激情一区二区三区全黄| 国产在线观看91精品一区| 99re6这里只有精品视频在线观看 99re6这里只有精品 | 香蕉精品999视频一区二区| 亚洲精品一区二区网址| 久久精品国产一区二区三| 亚洲一区在线播放| 欧美激情在线播放| 亚洲电影激情视频网站| 1000部国产精品成人观看| 欧美一区二区视频97| 亚洲欧美日韩国产中文| 欧美日韩亚洲一区二区三区在线观看 | 欧美了一区在线观看| 欧美激情aaaa| 亚洲人成在线观看网站高清| 久久久久国产一区二区三区四区| 久久精品国产精品| 国内精品久久久久久久影视蜜臀| 亚洲欧美综合国产精品一区| 欧美一级艳片视频免费观看| 国产精品亚洲成人| 亚洲淫性视频| 久久国产精品一区二区| 国内精品久久久久久| 久久精品欧洲| 欧美大片91| 亚洲精品网站在线播放gif| 欧美11—12娇小xxxx| 亚洲国产免费| 中文精品视频| 国产精品乱码一区二区三区| 亚洲男人的天堂在线观看| 久久久www免费人成黑人精品| 国产亚洲欧美日韩在线一区| 欧美一区二区在线免费播放| 久久在线播放| 亚洲精品乱码久久久久久久久 | 日韩一区二区精品视频| 亚洲男人的天堂在线| 国产欧美一区二区三区沐欲| 性欧美8khd高清极品| 老牛嫩草一区二区三区日本 | 欧美日韩国产123| 亚洲一区二区精品| 久久亚洲精品一区| 日韩视频永久免费| 国产精品男人爽免费视频1 | 国产欧美日韩专区发布| 久久九九99| 亚洲精品视频啊美女在线直播| 午夜精品久久久久99热蜜桃导演| 久久精品国产一区二区三| 欧美激情一区二区| 午夜精品一区二区在线观看| 揄拍成人国产精品视频| 欧美一区二区高清| 国精产品99永久一区一区| 欧美精品手机在线| 久久av在线看| 99在线精品视频| 欧美成人有码| 久久久久久久网| 中日韩在线视频| 亚洲国产精品久久久久秋霞不卡| 国产精品二区二区三区| 麻豆成人91精品二区三区| 亚洲一区视频在线观看视频| 欧美电影在线观看| 欧美一级片在线播放| 日韩一级片网址| 韩国免费一区| 国产精品久久久久久av下载红粉| 久久综合伊人| 欧美在线免费一级片| 亚洲视频专区在线| 亚洲人成人99网站| 欧美成人一区二区三区片免费| 久久久www成人免费精品| 亚洲天堂av电影| 亚洲美女视频网| 亚洲开发第一视频在线播放|