日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【CComPtr】CComPtr和CComQIPtr的区别

發布時間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【CComPtr】CComPtr和CComQIPtr的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2011年06月16日 下午 06:14
ATL 提供了2個智能指針的模板包裝類,CComPtr<> 和 CComQIPtr<>,這兩個類都在 <atlbase.h> 中聲明。CComQIPtr<> 包含了 CComPtr<>的所有功能,因此我們可以完全用 CComQIPtr<> 來使用智能接口指針,唯一要說明的一點就是:CComQIPtr<> 由于使用了運算符的重載功能,它會自動幫我們調用QueryInterface()函數,因此 CComQIPtr<> 唯一的缺點就是不能定義 IUnknown * 指針。    // 智能指針 smart pointer,按照匈牙利命名法,一般以 sp 開頭來表示變量類型CComPtr < IUnknown > spUnk; // 正確// 假設 IFun 是一個接口類型CComPtr < IFun > spFun; // 正確CComQIPtr < IFun > spFun; // 正確CComQIPtr < IFun, &IID_IFun > spFun; // 正確CComQIPtr < IUnknown > spUnk; // 錯誤!CComQIPtr不能定義IUnknown指針

給智能指針賦值的方法:

   CComQIPtr < IFun > spFun; // 調用構造函數,還沒有賦值,被包裝的內部接口指針為 NULLCComQIPtr < IFun > spFun( pOtherInterface ); // 調用構造函數,內部接口指針賦值為// 通過 pOtherInterface 這個普通接口指針調用QueryInterface()得到的IFun接口指針CComQIPtr < IFun > spFun( spOtherInterface ); // 調用構造函數,內部接口指針賦值為// 通過 spOtherInterface 這個只能接口指針調用QueryInterface()得到的IFun接口指針CComQIPtr < IFun > spFun ( pUnknown ); // 調用構造函數,由IUnknown的QueryInterface()得到IFun接口指針CComQIPtr < IFun > spFun = pOtherInterface; // = 運算符重載,含義和上面一樣spFun = spOtherInterface; // 同上spFun = pUnknown; // 同上pUnknown->QueryInterface( IID_IFun, &sp ); // 也可以通過QueryInterface賦值// 智能指針賦值后,可以用條件語句判斷是否合法有效if ( spFun ){} // 如果指針有效if ( NULL != spFun ){} // 如果指針有效if ( !spFun ){} // 如果指針無效if ( NULL == spFun ){} // 如果指針無效

智能指針調用函數的方法:

   spFun.CoCreateInstance(...); // 等價與 API 函數::CoCreateInstance(...)spFun.QueryInterface(...); // 等價與 API 函數::QueryInterface()spFun->Add(...); // 調用內部接口指針的接口函數// 調用內部接口指針的QueryInterface()函數,其實效果和 spFun.QueryInterface(...) 一樣spFun->QueryInterface(...); http://www.wzszf.com/ spFun.Release(); // 釋放內部的接口指針,同時內部指針賦值為 NULLspFun->Release(); // 錯!!!一定不要這么使用。// 因為這個調用并不把內部指針清空,那么析構的時候會被再次釋放(釋放了兩次)
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的【CComPtr】CComPtr和CComQIPtr的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。