COM接口繼承IUnkonwn接口,關於IUnkonwn裏面函數實現中用到引用計數的總結

因爲工作中要用到OPC,不得不先補下COM知識。看到COM接口時遇到一個專業術語引用計數(reference count),其實這個詞一點都不陌生,在C++ primer中就有詳細講述。由該詞引申出很多C++知識點,如果搞懂C++理解就不是表面的理解了。

這裏考到同學們的C++基礎知識了,跟我一起復習下吧。(C++ primer 第四版 自己看了3遍,很有信心。但是一看到引用計數這個術語,我只記得智能指針,其他都忘了。說明一個問題不用就要忘記,學習就是忘了再學,學了再忘的過程。大家注意學習方法,不懂的時候馬上就去翻翻補起)

正文:

引用計數這個詞怎麼來的,大家要知道,question:

class HasPtr
{
      public:
          HasPtr(int *p,int i):ptr(p),val(i) {}
            ........
     private:
             int *ptr;//請注意類中有指針成員變量
             int val;
};
int *ip=new int(42);
HasPtr ptr(ip,10);
delete ip;
ptr.sel_ptr_val(0);//問題ip和ptr中的指針多指向同一個對象,刪除該對象時,ptr中的指針不在指向有效對象,然後去取值當然不對。(MFC中經常會有這樣的問題,窗口類對象不在,通過窗口句柄訪問就會有問題)


answer:

(1)用智能指針實現,指針所指的對象是共享的,但類能夠防止懸掛指針。這裏會提到引用計數

(2)類採用值型行爲。指針所指的對象是唯一的,由每個類對象獨立管理

詳細參考C++ Primer 第四版,這裏只簡單說下
實現計數有二種經典策略:

a.通過友元方式實現

b.通過繼承,多態方式實現。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章