真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++的RAII和智能指針小結(jié)

RAII:資源分配即初始化,利用構(gòu)造函數(shù)和析構(gòu)函數(shù)定義一個類來完成對資源的分配和釋放

10年積累的成都網(wǎng)站制作、網(wǎng)站設(shè)計、外貿(mào)網(wǎng)站建設(shè)經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先做網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有桑植免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

智能指針主要用來防止內(nèi)存泄漏,我們來舉個栗子,看看為什么會有智能指針這個東東

例1:

C++的RAII和智能指針小結(jié)

對于上面這段程序,由于拋出異常的時候影響了代碼的執(zhí)行流,所以要在異常捕獲之前將p提前釋放(詳見

我的博客:C++的異常淺析),雖然可以通過再次拋出以異常解決這個問題,但是在代碼美觀方面不夠完

美,更重要的是如果在代碼量非常大,而且在多處有動態(tài)開辟出來的空間的時候,僅僅通過再次拋出異常已

經(jīng)遠遠不夠解決這個問題了,會使得工作量大大加大,那么有沒有什么辦法可以解決這種問題,而且不增加

工作量呢?

此刻就輪到我們的智能指針出場啦

首先我們先來認識五種智能指針

autoptr:管理權(quán)的轉(zhuǎn)移(最好不要使用,比較雞肋)

scoped ptr:強制防拷貝(針對和指針)

scoped array:強制防拷貝(針對數(shù)組)

shared ptr:引用計數(shù),通過增減計數(shù)器來管理,最后一個對象釋放(針對指針)

shared array:同上,針對數(shù)組

第一個先來看看autoptr類的實現(xiàn)

C++的RAII和智能指針小結(jié)C++的RAII和智能指針小結(jié)C++的RAII和智能指針小結(jié)

C++的RAII和智能指針小結(jié)

在我們剛開始學C++的時候可以知道當一個對象出了其作用域,就會自動調(diào)用她的析構(gòu)函數(shù),而智能指針正

是利用了這個原理,在用智能指針構(gòu)造對象的時候就會自動調(diào)用析構(gòu)函數(shù),這樣就不會發(fā)生內(nèi)存泄漏的問題

了。

那么問題又來了,智能指針本身并不是一個真正意義上的指針,而是一種“仿造”的指針,所以為了使它看

起來更像指針,就要對它的*和->進行一次重載,這樣看起來就更像指針啦

。

接下來要介紹的幾種智能指針相比autoptr會更實用一些,但是他們都屬于boost庫中的庫函數(shù),需要下載后

才能直接使用哦,我們來看一下它的類的實現(xiàn)

C++的RAII和智能指針小結(jié)

C++的RAII和智能指針小結(jié)

可以看出,為了防止拷貝,scopedptr的類在實現(xiàn)的時候?qū)⑺目截悩?gòu)造和賦值符重載聲明在了protected

中,這樣是為了防止有人惡意從外部對其進行實現(xiàn)。

記住防拷貝的兩個條件:①只聲明,不實現(xiàn)

              ②聲明成保護或私有

而和scopedptr很相似的scoped array,實現(xiàn)的機制和scopedptr是很像的,只不過在訪問它的內(nèi)部成員時,

既不需要很麻煩了,只需要重載一下[ ],就可以很容易訪問了。

C++的RAII和智能指針小結(jié)C++的RAII和智能指針小結(jié)

最后我們再來看看sharedptr,在前面我們學過寫時拷貝,同樣也是利用了引入計數(shù)器,所以在這里就不是

很難理解了,在它的類里面多了一個成員_pcount,表示指向當前對象的指針的個數(shù),這樣可以直觀的理解

sharedptr的實現(xiàn)機制了

C++的RAII和智能指針小結(jié)C++的RAII和智能指針小結(jié)

C++的RAII和智能指針小結(jié)

C++的RAII和智能指針小結(jié)

現(xiàn)在就剩下sharedarray了,和sharedptr一樣,只需要重載它的[ ],其余的就和sharedptr差不多了

C++的RAII和智能指針小結(jié)C++的RAII和智能指針小結(jié)

C++的RAII和智能指針小結(jié)

 C++的RAII和智能指針小結(jié)

通過上面的簡單介紹,相信大家對智能指針也有一定的了解了,既然智能指針這么好用,后面的編程肯定會

有很多地方用到它,所以掌握它們的用法是很重要的咯。


網(wǎng)頁標題:C++的RAII和智能指針小結(jié)
當前鏈接:http://weahome.cn/article/pohpih.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部