初次在《c++ primer》看到控制代碼,不是特別理解。在搜尋相關資料後,終於有了點頭緒。
首先明白控制代碼要解決什麼問題。參考文章《c++ 沉思錄》閱讀筆記——**類
場景:我們要把繼承類繫結到基類的例項物件中
該場景有兩個問題需要解決:記憶體分配和未知物件的繫結
有如下解決方案
直接複製繼承類物件到基類物件中
問題:很多時候基類是抽象類,無法例項化;不知道繼承類是什麼型別,其會被當成基類型別,會丟失自身的屬性;
使用乙個成員函式copy,讓繼承類告訴別人他自身是什麼類;利用該成員函式複製物件到基類物件中
這是乙個比較好的解決方案,但仍美中不足:
複製物件,需要記憶體開銷
從設計類的時候就要考慮為類定義成員函式copy
考慮引用。但引用會造成一系列更嚴重的記憶體管理和安全問題。
這個時候控制代碼就派上用場了。參考文章:
《c++ 沉思錄》閱讀筆記——控制代碼類 控制代碼
私有成員包含類指標,使用者不能直接操作類指標,但可以通過控制代碼類提供的函式使用類的介面函式
私有成員包含int指標型別的引用計數值,避免多次複製副本產生大量記憶體開銷
計數值為0時,刪除副本;
計數值首次賦值時,複製原物件,因此即使原物件被刪除,也不會出現垂懸指標的問題。
總結:控制代碼類避免了使用者接觸指標,因此使用者不用考慮其記憶體管理;控制代碼類使用引用計數的方式,來避免每次複製都需要拷貝物件。
C 中的控制代碼類(智慧型指標)
最近工作中用到了控制代碼類,特意了解了一下,後來發現所謂的控制代碼其實和智慧型指標就是一回事。為了能夠更好的理解控制代碼類,建議大家先了解c 中類 類的繼承 多型等概念,不然很容易懵。控制代碼 handler 之所以翻譯成柄,就是用乙個類來撬動很多類。類似於從一大堆數中,只要拿著乙個數 基類 後面跟...
C 中的控制代碼
這個控制代碼只是從英文 handle 翻譯過來的,只問句是什麼意思難以解釋,這個是我從別人的空間收集的資訊,功能上的理解 什麼是 控制代碼 handle handle 的本意是把柄,把手的意思。是你與作業系統打交道的東東。舉個通俗的例子,比如你考上了大學,入學後,學校 作業系統 會給你乙個學生證號。...
C 實現控制代碼類(一)
c 學習筆記之實現控制代碼類 寒假看了c 沉思錄和c 程式語言,一直對類的功能分類相關章節記憶猶新,感到這些都是c oop思想的精髓。昨天突然想到為什麼不實踐一下,寫乙個簡單的控制代碼類呢?c 初學者可能不知道控制代碼類為何物。其實說白了,控制代碼類就是為了消除來自同乙個基類的派生類的操作差異性而建...