c primer 動態記憶體

2021-07-05 21:14:00 字數 1176 閱讀 4435

在這裡提到的內容裡,均包含在標頭檔案:#include裡面,主要涉及c++的記憶體管理問題,在做專案的時候,可能會遇到,僅僅只是個人筆記,如有錯誤,還請大神賜教。。。。

1.智慧型指標:指的是在程式呼叫完最後乙個智慧型指標指的物件,自動釋放記憶體單元。包含shared_ptr,unique_ptr,weak_ptr三類(也是模板,類似於vector):

shared_ptr類:定義:shared_ptrp1;//指向string,安全使用make_shared函式,這個是在記憶體中分配乙個物件然後初始化,返回指向物件的shared_ptr,

shared_ptrp3=make_shared(42);//指向乙個值為42的智慧型指標。(auto的定義方式)auto p1=make_shared>();當然拷貝也是可以的,auto q(p1);

共享資料:當p2和p1指向同乙個物件時,p2呼叫結束時,並不會立即釋放記憶體,因為p1還在使用記憶體。當p1和p2全部呼叫完成才會釋放記憶體單元。

new和shared_ptr的結合使用

shared_ptrp1=new int(1024);//這是個錯誤的使用方式,正確的使用方式是:(在直接初始化的時候使用)shared_ptrp1(new int(1024));

其原因是內建指標不能強制轉化成智慧型指標。

unique_ptr類:乙個unique_ptr指向內容只能有乙個unique_ptr指向,不能多個共享。release僅僅把當前指標置為空,看下面例子

unique_ptrp2(p1.release());//將p1置為空,

unique_ptrp2;p2.reset

(p1.release());//將p1記憶體釋放,p2的記憶體單元指向p1

weak_ptr:繫結在乙個shared_ptr上,一旦物件釋放,有weak_ptr也會被釋放。解決了shared_ptr的問題。

2.動態陣列:new和delete

這個要注意一點就是delete多個記憶體是要加delete;new和delete要配套使用

3.allocator類

為了達到記憶體分配和物件構造的分離,使用這個類,能夠申請一段單元,不需要給賦初值。

初始化:allocatoralloc;auto p=alloc.allocate(n);//分配n個未初始化的資料

construct初始化分配的記憶體,deallocate釋放分配的記憶體單元,destroy是把申請的記憶體還給系統。

c primer筆記 動態記憶體

shared ptr p1 儲存著乙個空指標 make shared args shared ptr p3 make shared 42 shared ptr p4 make shared 10,d 引用計數 拷貝,初始化,函式引數,函式返回值,計數 1 銷毀計數 1 auto r make sha...

c primer 動態記憶體學習小記

在做練習題12.7時,遇到乙個問題,如果這麼定義乙個shared ptr是有問題得,不能往裡面push back元素,如下 所示 auto create auto input shared ptr d return d 如果這樣建立了p之後 傳入到input函式中使用push back 就會出錯。正...

c primer 學習筆記11 動態記憶體

書本411頁。練習12.6 編寫函式,返回乙個動態分配的int的vector。將此vector傳遞給另乙個函式,這個函式讀取標準輸入,將輸入的值儲存在vector元素中,再將vector傳遞給另乙個函式,列印輸入的值。記得在恰當的時候delete vector。include include usi...