記憶體的智慧型管理 智慧型指標

2021-10-19 22:33:39 字數 1254 閱讀 5020

前言

我們在使用c和c++進行開發的時候,申請堆區記憶體是必不可少的,但是很多時候,我們經常忘記釋放他導致記憶體洩漏,從而導致程式崩潰,又或者在尚未使用完成的時候釋放,從而導致出現野指標,都是非常危險的現象,所以我們在c++11的標準中提出了智慧型指標的概念,他就是一種可以幫我們自動釋放記憶體的存在

共享智慧型指標 - shared_ptr

他是使用最多的智慧型指標,它可以讓多個指標指向同一片記憶體,同時在這片記憶體指向變為0的時候,他就會被釋放

他有三種構造方式

//直接構造

shared_ptr<

int>

ptr(

newint(10

));//使用make_shared

shared_ptr<

int>ptr1=make_shared<

int>(9

);//直接賦值

shared_ptr<

int>ptr2=ptr1;

同樣你還可以使用他的一些成員函式

get()//獲取當前指標

swap()//交換管理物件

reset()//對指標進行重置操作,使原有指向修改為新的指向,該函式會

首先將原有記憶體減1,當減小為0會釋放記憶體

use_conut()

//智慧型指標指向記憶體引用計數

同樣的,智慧型指標只能管理一片記憶體,要是管理陣列需要手動釋放

//智慧型指標只能管理一塊記憶體, 要是想管理陣列, 需要手動釋放   

//智慧型指標管理陣列, 需要自己指定lamb表示式自己釋放

shared_ptr

ptr4

(new a[5]

,[](a *p)

);

唯一智慧型指標 - unique_ptr

只允許乙個智慧型指標指向這塊記憶體

//直接構造

unique_ptr<

int>

ptr(

newint(10

));//使用make_shared,在linux環境下無法使用

unique_ptr<

int>ptr1=make_shared<

int>(9

);

弱指標 -weak_ptr

這個使用的很少,主要是為了解決迴圈引用導致的記憶體洩露,引入了弱指標,他不會計入共享指標的數值,所以他不會對記憶體進行管理,主要是用來檢測是否被釋放

記憶體管理 智慧型指標之shared array

shared array類似shared ptr,它包裝了new操作符在堆上分配的動態陣列,同樣使用引用計數機制為動態陣列提供了乙個 可以在程式的生命同期裡長期存在,直到沒有任何引用後才釋放記憶體。類摘要 templateclass shared array shared array與shared ...

c 智慧型指標與記憶體管理

c 中當我們需要新分配記憶體的時候需要手動的去呼叫new顯式的分配一塊記憶體,如果我們在任何中new 如函式中申請空間返回 忘記釋放,或者在 函式執行過程中出現異常,沒 有執行釋放語句 了空間,在不需要使用後忘記了呼叫delete這塊位址的話就會造成 記憶體洩露。為了解決這乙個問題引入了智慧型指標。...

管理指標成員(智慧型指標)

簡單記錄下我的學習過程 為主 題外話 過幾天就要出去找工作了。這幾天在家看看曾經做過的題。如今想想時間過得真的好快,希望自己能找乙份自己愜意的工作。以下是學習心得 這幅圖非常好的闡述了僅僅能指標的概念,事實上智慧型指標就是乙個計數類!以後多用用就熟悉了。設計介面 int get ptr const ...