在這裡提到的內容裡,均包含在標頭檔案:#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...