C 學習筆記 第二部分第十二章 動態記憶體

2021-08-08 07:06:47 字數 1360 閱讀 8415

動態記憶體

靜態記憶體儲存區域性static物件,類static資料成員,以及定義在任何函式之外的變數

棧記憶體用來儲存定義在函式內的非static物件

分配在靜態記憶體或者棧記憶體的物件由編譯器自動你那個建立和銷毀

程式使用堆來儲存動態分配的物件

兩種智慧型指標的行為類似常規指標,重要的區別是它負責自動釋放所指向的物件

shared_ptr允許多個指標指向同乙個物件,unique_prt」獨佔「所指物件,定義在memory標頭檔案

最安全的分配和使用動態記憶體的方法是呼叫make_shared

如果分配了動態記憶體,用完之後忘記釋放記憶體,這樣就會產生記憶體洩漏。如果在尚有指標引用記憶體的情況我們就釋放了它,就會產生引用非法記憶體的指標。

智慧型指標使用規範:不使用相同的內建指標值初始化(或reset)多個智慧型指標;不delete get()返回的指標;不使用get()初始化或reset另乙個智慧型指標;如果使用get()返回的指標,記住當最後乙個對應的智慧型指標銷毀後,返回的指標就無效了;如果使用智慧型指標管理的資源不是new分配的記憶體,記得傳遞給它乙個刪除器。

unique_ptr,定義時,我們需要將其繫結到乙個new返回的指標

類似shared_ptr,unique_ptr的初始化必須採用直接初始化形式

unique_ptr不支援普通的拷貝或賦值。(例外,可以拷貝或賦值乙個將要被銷毀的unique_ptr,例如函式返回)

unique_ptr對指標的所有權可以由release或reset來轉移

建立乙個weak_ptr 的時候,用shared_ptr來初始化

weak_ptr不會改變shared_ptr所指物件的計數

由於物件有可能不存在,所以不能使用weak_ptr直接訪問物件,而應該呼叫lock。p420

weak_ptr不會影響所指物件的生存期

大多數應用應該使用標準庫容器而不是動態分配的陣列。使用容器更為簡單,更不容器出現記憶體管理錯誤且可能有更好的效能

動態陣列並不是陣列型別,返回的是乙個元素型別的指標,因此不能對動態陣列呼叫begin或end,也不能用範圍for語句來處理動態陣列中的元素

delete p // p必須指向乙個動態分配的物件或為空

delete pa //pa必須指向乙個動態分配的陣列或為空

標準庫allocator類定義在標頭檔案memory中,幫助我們將分配記憶體和物件構造分離開來

allocator分配的記憶體是未構造的

為了使用allocator返回的記憶體,我們必須使用construct構造物件

當使用完物件後,必須對每個構造的元素呼叫destroy,來執行物件的析構函式

c 學習筆記第二部分

part 2 一 陣列 指標 在c 中的陣列std string str string是std類裡面的乙個物件 這個語句就是命名乙個陣列名字叫做str 2.c 允許指標群 p,就是多個指標有同樣的值 int p1 myint int p2 myint c 支援無型別 void 指標,就是沒有被宣告為...

linux筆記第二部分

其實我只是想記錄下自己的學習軌跡,順便讓自己的部落格裡面稍微有點東西。之前筆記都是儲存在evernote上,因為是普通使用者,貌似不能共享。就拷過來了。總之這是第二部分 linux磁碟及檔案系統管理以及如何獲取幫助 linux 08磁碟基本概念 linux 09使用fdisk進行磁碟管理 1.fdi...

前端學習筆記第二部分 CSS

css通常稱為css樣式表或者層疊樣式表,主要我你故意設定html頁面中的文字內容 的外形 以及版面的布局等外觀顯示樣式。css的樣式規則,具體格式如下 h1 選擇器 屬性 值 屬性 值 選擇器用於指定css樣式作用的html物件,花括號內是對該物件設定的具體樣式 屬性和屬性值以鍵值對的形式出現 多...