• <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>
            隨筆 - 64, 文章 - 11, 評(píng)論 - 12, 引用 - 0
            數(shù)據(jù)加載中……

            CComPtr的構(gòu)造函數(shù)與 Attach方法的使用

             

                     CComPtr<T>是一個(gè)ATL中的一個(gè)智能指針類型,它及它的派生類CComQIPtr<T>為我們提供了智能管理COM接口指針的能力。 也就是在析構(gòu)時(shí)自動(dòng)釋放資源的工具類,這些工具類能有效地幫助我們杜絕內(nèi)存泄漏、句柄沒(méi)有釋放之類錯(cuò)誤。她們是很智能、很聰明,不過(guò)這要我們寫(xiě)出正確的程式,如果使用不正確也會(huì)出現(xiàn)上述這些問(wèn)題。往往內(nèi)存泄漏、句柄沒(méi)有釋放這些錯(cuò)誤很難一下調(diào)試出來(lái),多數(shù)是通過(guò)工具來(lái)檢查出來(lái)。有的工具對(duì)智能指針的誤用也是較難發(fā)現(xiàn)。

            下面是我經(jīng)歷過(guò)的一個(gè)場(chǎng)景:
             

            [

            object,

            uuid(….),

            ….

            ]

            Interface IA

            {

            };

             

            //Client;

            Class B

            {

                     IA GetIA(..);

            };

            B b;

            CComPtr<IA> aPtr(b.GetIA(…));

             

            這樣導(dǎo)致我的一個(gè)結(jié)構(gòu)化存儲(chǔ)資源被長(zhǎng)久地占用,不能刪除。有人或許已經(jīng)知道問(wèn)題的所在了。這個(gè)錯(cuò)誤就在于CComPtr<IA> aPtr(b.GetIA(…));這樣從方法傳出來(lái)的接口就沒(méi)有能夠調(diào)用Release,這樣泄漏就產(chǎn)生了。正確的使用應(yīng)如下

             

            CComPtr<IA> aPtr;

            aPtr.Attach(b.GetIA(…));

             

            拿出這兩個(gè)方法的源代碼就非常清楚了。

                 CComPtrBase(_In_opt_ T* lp) throw()

                 {

                     p = lp;

                     if (p != NULL)

                          p->AddRef();

                 }

             

                      void Attach(_In_opt_ T* p2) throw()

                 {

                     if (p)

                          p->Release();

                     p = p2;

                 }

             

                     對(duì)于Detach和析構(gòu)方法不會(huì)因混亂造成問(wèn)題,因?yàn)镈etach總是用于一個(gè)方法中要返回一個(gè)智能指針的實(shí)際接口時(shí)調(diào)用從而達(dá)到使代碼簡(jiǎn)潔。而析構(gòu)也會(huì)因?yàn)榉蛛x出了接口指針而不做任何事情。

            posted on 2008-10-21 16:52 Robertxiao 閱讀(2159) 評(píng)論(0)  編輯 收藏 引用 所屬分類: RPC/COM/ATL散談

            久久99精品久久久久久不卡| jizzjizz国产精品久久| 国产一区二区精品久久凹凸| 国产欧美久久一区二区| 日韩人妻无码精品久久久不卡| 一日本道伊人久久综合影| 亚洲欧美精品一区久久中文字幕| 久久国产三级无码一区二区| 狠狠精品久久久无码中文字幕 | 久久香综合精品久久伊人| 久久精品亚洲AV久久久无码| 国内精品久久久久久久久电影网| 欧美精品国产综合久久| 久久综合88熟人妻| 久久久久国产一级毛片高清版| 91亚洲国产成人久久精品网址| 国产激情久久久久影院老熟女| 亚洲AV伊人久久青青草原| 精品国产乱码久久久久久呢| 久久精品午夜一区二区福利| 91精品国产91热久久久久福利| 伊人久久精品影院| 91精品国产色综合久久| 久久无码AV中文出轨人妻 | 人妻精品久久久久中文字幕| 欧美日韩久久中文字幕| 国产成人久久精品一区二区三区| 一本大道加勒比久久综合| 久久大香萑太香蕉av| 日韩乱码人妻无码中文字幕久久| 青青草国产精品久久久久| 少妇久久久久久被弄到高潮 | 久久精品无码午夜福利理论片| 久久99精品久久久久久水蜜桃 | 久久亚洲国产最新网站| 成人午夜精品无码区久久| 亚洲伊人久久大香线蕉苏妲己| 麻豆精品久久久久久久99蜜桃| 色综合合久久天天综合绕视看| 亚洲综合久久夜AV | 91久久九九无码成人网站|