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

Error

C++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
  217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks
之前自己設(shè)計(jì)Ref類型遇到new出來(lái)的地址,和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 閱讀(364) 評(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>
            亚洲大片av| 日韩视频二区| 欧美色图一区二区三区| 欧美一区二区三区免费观看视频| 欧美激情成人在线| 久久精品二区| 亚洲欧美区自拍先锋| 亚洲另类在线视频| 一区一区视频| 国产一区av在线| 国产精品网站视频| 欧美日韩免费观看一区三区 | 国产精品美女视频网站| 免费观看亚洲视频大全| 久久国产婷婷国产香蕉| 亚洲欧美999| 国产精品99久久久久久久女警 | 欧美三级小说| 欧美剧在线免费观看网站| 久久一二三四| 久久久久九九九| 欧美一区在线视频| 性高湖久久久久久久久| 亚洲一区二区在线播放| 在线亚洲精品福利网址导航| 最新日韩中文字幕| 亚洲黑丝在线| 亚洲激情午夜| 亚洲精品国久久99热| 亚洲国产一区二区在线| 亚洲国产视频一区| 亚洲精品乱码视频| 亚洲精品一区在线| 亚洲精品社区| 一本色道久久88亚洲综合88| a4yy欧美一区二区三区| 亚洲精品之草原avav久久| 亚洲激情社区| 亚洲日本国产| 99亚洲伊人久久精品影院红桃| 日韩视频免费观看高清在线视频 | 欧美一区亚洲一区| 欧美一区二区三区喷汁尤物| 午夜国产精品视频免费体验区| 亚洲已满18点击进入久久| 亚洲一区图片| 先锋影音网一区二区| 欧美在线免费观看| 久久九九国产精品怡红院| 久久亚洲影音av资源网| 欧美成熟视频| 欧美日韩午夜在线| 国产精品视区| 狠狠爱综合网| 亚洲精品久久久久| 亚洲一区二区在| 欧美资源在线观看| 免费看的黄色欧美网站| 亚洲高清不卡在线| 一个色综合导航| 新片速递亚洲合集欧美合集| 久久网站热最新地址| 欧美精品日韩一本| 国产精品你懂的在线欣赏| 狠狠色伊人亚洲综合成人| 最新日韩av| 香蕉av福利精品导航| 蜜桃av一区二区| 日韩视频免费大全中文字幕| 性18欧美另类| 欧美高清在线播放| 国产精品免费小视频| **网站欧美大片在线观看| 99re66热这里只有精品4| 欧美亚洲一区| 亚洲电影av在线| 亚洲欧美视频在线观看| 免费人成网站在线观看欧美高清| 欧美日韩午夜激情| 激情视频一区| 亚洲免费视频网站| 麻豆久久婷婷| 亚洲午夜激情网站| 欧美成人免费va影院高清| 国产精品专区h在线观看| 91久久黄色| 久久精品综合一区| 亚洲精品国精品久久99热一| 久久成人亚洲| 国产精品久久激情| 亚洲欧洲精品一区二区三区波多野1战4 | 妖精成人www高清在线观看| 久久国产欧美精品| 国产精品久久999| 91久久精品美女| 久久久久中文| 亚洲欧美日韩精品久久| 欧美日韩aaaaa| 亚洲第一精品夜夜躁人人躁| 亚洲欧美在线一区二区| 最新亚洲视频| 麻豆国产精品一区二区三区| 国产手机视频精品| 午夜精品福利一区二区蜜股av| 亚洲第一色中文字幕| 久久精品国产99国产精品澳门| 国产精品分类| 亚洲视频一区二区在线观看| 亚洲成色www8888| 亚洲一区二区在| 亚洲国产高清在线观看视频| 久久大香伊蕉在人线观看热2| 国产精品裸体一区二区三区| 一区二区三区视频免费在线观看| 欧美国产日本| 久久在线免费观看| 国产女优一区| 欧美在线视频免费播放| 亚洲视频在线观看一区| 欧美日韩在线看| 一区二区三区视频观看| 亚洲精品黄色| 欧美日韩 国产精品| 亚洲老板91色精品久久| 亚洲国产午夜| 欧美劲爆第一页| 99国产欧美久久久精品| 最新中文字幕一区二区三区| 女生裸体视频一区二区三区| 亚洲国产精品一区二区第四页av | 宅男噜噜噜66一区二区66| 欧美激情亚洲视频| 亚洲六月丁香色婷婷综合久久| 亚洲黄色av| 欧美久色视频| 亚洲伊人久久综合| 中文在线一区| 国产日韩精品视频一区二区三区| 欧美一区二区视频网站| 小黄鸭精品aⅴ导航网站入口| 国产一区二区三区的电影| 久久综合九色综合欧美就去吻| 久久精品青青大伊人av| 亚洲国产精品传媒在线观看| 亚洲盗摄视频| 欧美三级第一页| 久久国产主播| 久久一二三国产| 亚洲精品日产精品乱码不卡| 亚洲免费观看在线视频| 国产精品美女久久久免费| 久久精品国产成人| 久久综合色8888| 一区二区三区国产在线| 亚洲在线观看| 亚洲成人在线| 亚洲伦理中文字幕| 国产欧美视频一区二区三区| 狂野欧美激情性xxxx欧美| 欧美ab在线视频| 亚洲男人的天堂在线观看| 欧美在线视频一区| 亚洲精品视频在线播放| 亚洲性视频网址| 亚洲电影在线播放| 一区二区黄色| 激情欧美一区二区三区在线观看| 亚洲国产你懂的| 国产精品美女在线观看| 久久视频一区| 欧美a一区二区| 亚洲精品1区2区| 亚洲区一区二| 国产精品视频午夜| 欧美专区第一页| 欧美高清在线一区| 亚洲尤物精选| 久久久久久穴| 亚洲欧美变态国产另类| 久久aⅴ国产紧身牛仔裤| 亚洲国产专区校园欧美| 欧美www视频| 国产精品无码永久免费888| 美日韩在线观看| 欧美日韩另类一区| 欧美成人精品| 国产精品久久看| 免费在线播放第一区高清av| 欧美激情欧美狂野欧美精品| 亚洲欧美美女| 蜜臀久久久99精品久久久久久 | 久久综合九色九九| 一区二区三区四区国产| 欧美一级午夜免费电影| 亚洲午夜激情网页| 久久久久久有精品国产| 中国成人在线视频| 欧美一区二区三区日韩| 亚洲综合日韩中文字幕v在线| 久久精品国产免费看久久精品|