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

Error

C++博客 首頁 新隨筆 聯(lián)系 聚合 管理
  217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks
之前自己設(shè)計Ref類型遇到new出來的地址,和Ref的this指針一致的情況,soui的這套做法一定程度避免了
如果有普通的單根繼承直接使用: public 
TObjRefImpl<IRef>
如果是多根繼承可以指定析構(gòu)類型 :public TObjRefImpl2<TDeleteType>
但是多重繼承兩個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     //!釋放對象
 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) 評論(0)  編輯 收藏 引用 所屬分類: 從零開始寫棋牌游戲平臺
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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精品国产| 国产最新精品精品你懂的| 欧美大片在线观看一区| 亚洲午夜久久久久久久久电影院| 亚洲日本国产| 欧美日韩三级在线| 亚洲男人的天堂在线观看| 美女视频网站黄色亚洲| 午夜久久电影网| 一区二区三区成人| 亚洲第一页自拍| 久久影视三级福利片| 久久久精品国产免大香伊 | 亚洲第一黄网| 欧美电影在线观看完整版| 麻豆成人综合网| 亚洲国产欧美日韩精品| 亚洲美女精品一区| 亚洲激情网址| 欧美视频二区| 国产精品美女久久久久aⅴ国产馆| 欧美精品色综合| 欧美精品久久天天躁| 麻豆精品精华液| 亚洲综合色视频| 91久久综合| 一区二区三区四区五区视频| 欧美影院精品一区| 欧美激情亚洲国产| 午夜精品久久久久久久久久久| 亚洲无线视频| 欧美日韩一卡| 亚洲精品欧美精品| 欧美mv日韩mv国产网站| 亚洲欧美日韩区| 国产欧美午夜| 欧美一区日韩一区| 狠狠久久亚洲欧美| 久久乐国产精品| 欧美在线免费视屏| 国内精品久久久| 亚洲欧美日韩综合国产aⅴ| 亚洲国产成人精品女人久久久| 久久久一区二区| 亚洲国产一区在线观看| 亚洲国产综合91精品麻豆| 欧美激情自拍| 亚洲欧美成人在线| 欧美在线看片| 99热精品在线观看| 亚洲一区二区三区三| 国户精品久久久久久久久久久不卡| 久久青青草综合| 久久躁狠狠躁夜夜爽| 在线一区日本视频| 欧美一区二区三区在线观看视频 | 欧美在线一二三四区| 亚洲大片在线观看| 亚洲美女诱惑| 欧美日韩精品免费观看视频完整| 乱码第一页成人| 亚洲国产小视频在线观看| 欧美精品久久99久久在免费线| 亚洲午夜一区二区三区| 在线综合视频| 国产在线精品成人一区二区三区| 久久国产精品一区二区三区四区| 久久综合导航| 性欧美精品高清| 亚洲福利在线视频| 午夜精品久久久久久久99水蜜桃 | 欧美亚洲视频在线观看| 另类图片国产| 欧美国产日韩视频| 亚洲国产成人精品久久久国产成人一区 | 久久久久久亚洲综合影院红桃| 亚洲最新在线视频| 欧美激情国产日韩| 亚洲国产天堂久久综合网| 亚洲福利国产| 欧美日韩成人网| 亚洲一区在线看| 久久久青草婷婷精品综合日韩| 国产午夜精品一区二区三区视频| 久久精品99国产精品日本 | 亚洲国产精品第一区二区| 欧美怡红院视频| 欧美激情一区二区三区蜜桃视频 | 香蕉久久夜色精品| 欧美日韩综合久久| 亚洲网址在线| 亚洲最新在线视频| 麻豆精品在线视频| 激情综合电影网| 欧美激情久久久| 欧美视频不卡| 欧美亚洲色图校园春色| 亚洲综合电影一区二区三区| 蜜桃久久av| 欧美在线免费观看亚洲| 国产欧美日韩亚洲| 美女诱惑一区| 久久九九免费视频| 夜夜爽99久久国产综合精品女不卡| 欧美一区国产在线| 亚洲一区二区三区高清 | 欧美精品网站| 欧美在线免费一级片| 亚洲欧美日韩网| 亚洲一区在线免费| 亚洲深夜福利| 一区二区三区视频在线播放| 欧美大成色www永久网站婷| 性做久久久久久免费观看欧美| 91久久精品美女| 亚洲国产精品视频| 91久久中文| 亚洲电影观看| 亚洲黄色影院| 亚洲午夜视频| 欧美一区二区三区在| 久久精品人人做人人综合| 久久久久.com| 欧美电影打屁股sp| 亚洲黄一区二区| 小黄鸭精品aⅴ导航网站入口| 亚洲一区在线观看视频 | 欧美日韩久久| 欧美日韩亚洲综合一区| 国产一区二区久久| 一区二区视频免费在线观看| 亚洲国产成人久久| 亚洲午夜精品久久| 欧美日韩国产欧| 国产精品实拍| 亚洲电影免费在线| 夜夜爽www精品| 久久久91精品国产一区二区精品| 亚洲大片在线观看| 午夜久久tv| 国产精品视频导航| 99xxxx成人网| 亚洲欧洲一区二区在线播放| 欧美一区=区| 国产精品爽爽爽| 亚洲毛片av在线| 欧美福利一区二区| 久久精品一二三区| 国产欧美一区二区三区另类精品| 一本久道久久综合中文字幕| 久久久欧美精品| 欧美一级成年大片在线观看| 国产欧美日本| 久久久激情视频| 欧美一区影院| 国内精品亚洲| 亚洲黄色在线观看| 欧美黄色一区| 亚洲一区二区三区免费视频| 日韩视频专区| 韩国视频理论视频久久| 欧美色图一区二区三区| 欧美激情aaaa| 欧美久久久久久久| 一区二区三区国产| 久久综合网色—综合色88| 久久国产一二区| 国产亚洲欧美在线| 欧美一区激情视频在线观看| 亚洲欧美文学| 国产日本欧洲亚洲| 久久爱另类一区二区小说| 欧美专区在线观看| 国产一区二区三区日韩欧美| 欧美一区综合| 亚洲国产婷婷香蕉久久久久久99| 女同性一区二区三区人了人一| 在线观看欧美日本| 欧美一区二区三区四区在线观看地址| 美女脱光内衣内裤视频久久影院 | 欧美大成色www永久网站婷| 亚洲国产精品123| 99精品久久| 国产精品男女猛烈高潮激情 | 久久久精品一区| 亚洲国产精品欧美一二99| 欧美日本免费一区二区三区| 亚洲全黄一级网站| 午夜国产欧美理论在线播放| 国产亚洲一区二区三区在线观看| 欧美亚洲一区| 免费欧美电影| 亚洲色图制服丝袜| 国产精品婷婷午夜在线观看| 久久精品三级| 亚洲狼人综合| 久久男人资源视频| 亚洲乱亚洲高清| 国产精品一区二区久久久久|