因爲工作中要用到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.通過繼承,多態方式實現。