這是《Effective C++》中第15條原則,我感覺非常抽象,理解起來很費勁,那我就邊理解邊寫博客吧。
首先你要明白啥叫原始資源,其實確切的概念我也說不準(zhǔn),但是你可以簡單地理解為被資源管理類管理的資源。
管理資源要使用資源管理類,通常這個類被稱為RAⅡ類,在理想的情況下,你總是試圖使用RAⅡ類來進行資源管理,但是世事無常,總有一些API(Application Programming Interface)會直接調(diào)用原始資源,它們會繞過RAⅡ類,而這不符合你的原則,而你又不得不去用。
那么本原則會叫你處理這種情況的一些方法。
作者舉了兩個例子:
1、通過傳遞資源管理類的對象的某些方法間接傳遞一份原始資源的COPY,這樣真正的原始資源不會得到改變。那就需要RAⅡ類提供一個接口使對象能夠暴露出其內(nèi)所含的原始資源。而這通常是通過顯式轉(zhuǎn)換和隱式轉(zhuǎn)換來實現(xiàn)的。書中仍然是以智能指針auto_ptr和shared_ptr為例加以說明,它們提供接口get來顯式獲取原始資源指針,另外還通過重載->和.來隱式獲取原始資源。
2、作者又舉了一個字體調(diào)用的例子。字體本身是一種原始資源,我們創(chuàng)建了一個類用來管理字體。因為這種原始資源比較特殊應(yīng)用場合也很多,所以存在讓資源管理類提供一個向外界開放的接口的必要性,外界通過調(diào)用這個接口從而使用字體這種原始資源。又因為最終是要使用這種原始資源的,所以必然會調(diào)用字體的類型,從而這就存在一個類型轉(zhuǎn)換的過程。同理,作者有提供了顯式和隱式轉(zhuǎn)換兩種轉(zhuǎn)換手段。
顯式轉(zhuǎn)換自不必提,其實也是get,它極大地減少了資源泄露的可能性。
而隱式轉(zhuǎn)換可以自動轉(zhuǎn)換為原始資源類型,但是這存在一個問題。那便是如果用戶現(xiàn)在就是想使用一個資源管理類RAⅡ的對象,那沒辦法他現(xiàn)在必須轉(zhuǎn)換為原始資源類型才能使用。而這隱含的兇兆就是如果你不經(jīng)意間刪除了RAⅡ?qū)ο?,那也就意外地刪除了原始資源的對象,那么你轉(zhuǎn)換過來的也就沒了。
總結(jié)一下,作者強調(diào)無論是顯示還是隱式轉(zhuǎn)換都是要視情況而定的,沒有完全的絕對。另外,RAⅡ是的職責(zé)是資源管理重在資源釋放,雖然訪問原始資源突破了類的封裝特性,但是這不是RAⅡ的首要存在意義。
原則15:在資源管理類中提供對原始資源的訪問
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 比特幣基于的公私鑰加密原理:基于橢圓曲線乘法作為其公私鑰加密的基礎(chǔ)算法。該關(guān)鍵點:該算法不可逆!不可逆!不可逆! ...