亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++的RAII和智能指針小結

發布時間:2020-08-23 01:54:53 來源:網絡 閱讀:693 作者:福大馨 欄目:編程語言


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

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

例1:

C++的RAII和智能指針小結

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

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

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

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

工作量呢?

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

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

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

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

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

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

shared array:同上,針對數組

第一個先來看看autoptr類的實現

C++的RAII和智能指針小結C++的RAII和智能指針小結C++的RAII和智能指針小結

C++的RAII和智能指針小結

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

是利用了這個原理,在用智能指針構造對象的時候就會自動調用析構函數,這樣就不會發生內存泄漏的問題

了。

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

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

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

才能直接使用哦,我們來看一下它的類的實現

C++的RAII和智能指針小結

C++的RAII和智能指針小結

可以看出,為了防止拷貝,scopedptr的類在實現的時候將她的拷貝構造和賦值符重載聲明在了protected

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


記住防拷貝的兩個條件:①只聲明,不實現

              ②聲明成保護或私有

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

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


C++的RAII和智能指針小結C++的RAII和智能指針小結


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

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

sharedptr的實現機制了



C++的RAII和智能指針小結C++的RAII和智能指針小結

C++的RAII和智能指針小結

C++的RAII和智能指針小結

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

C++的RAII和智能指針小結C++的RAII和智能指針小結

C++的RAII和智能指針小結

 C++的RAII和智能指針小結

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

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


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

教育| 通山县| 南安市| 固原市| 青海省| 雅江县| 毕节市| 潢川县| 汽车| 湘阴县| 广宗县| 清远市| 昌图县| 洛川县| 房产| 绥芬河市| 称多县| 辰溪县| 恩施市| 台湾省| 大兴区| 甘南县| 福泉市| 乐至县| 富民县| 洪江市| 梅河口市| 澄迈县| 永仁县| 中山市| 克什克腾旗| 金堂县| 静安区| 思南县| 叙永县| 体育| 柳江县| 清原| 郎溪县| 墨竹工卡县| 巩义市|