動態記憶體和智慧型指標

2021-08-04 10:38:30 字數 869 閱讀 6683

《c++ primer》第五版

p399

全域性物件在程式啟動時分配,程式結束時銷毀。區域性變數,進去其定義所在的程式塊時被建立沒在離開塊時銷毀。區域性static物件在第一次使用前分配,在程式結束時銷毀。

動態分配的物件的生存期與它們在**建立是無關的,只有當顯式地被釋放時,物件才會銷毀。

為安全使用動態物件,標準庫定義了兩個智慧型指標型別來管理動態分配的物件。當乙個物件乙個被釋放時,指向它的智慧型指標可以確保自動地釋放它。

p400

靜態記憶體用來儲存區域性static物件、類static資料成員、定義在任何函式之外的變數。棧記憶體用來儲存定義在函式內的非static物件。

對於棧物件,僅在其定義的程式塊執行時才存在;static物件在使用前分配,在程式結束時銷毀。

除了靜態記憶體和棧記憶體,每個程式有乙個記憶體池,被稱為自由空間free store或堆heap。程式用堆來儲存動態分配的物件-那些在程式執行時分配的物件。動態物件的生存期由程式來控制,當動態物件不再使用時,**必須顯示銷毀它們。

c++中,動態記憶體的管理是通過new 和 delete這對運算子來完成的。

問題:使用動態記憶體容易出問題,無法確保在正確時間釋放記憶體。

(1)忘記釋放記憶體,導致記憶體洩露;(2)有指標引用記憶體情況下就釋放,產生引用非法記憶體的指標。

兩種智慧型指標smart pointer,負責自動釋放所指向的物件。兩種指標區別在於管理底層指標的方式。

shared_ptr允許多個指標指向同乙個物件;unique_ptr則「獨佔」所指向的物件。標準庫還定義了乙個名為weak_ptr的伴隨類,是一種弱引用,指向shared_ptr所管理的物件。這三種型別都定義在memory標頭檔案中。

auto_ptr**

智慧型指標std::auto_ptr

26 智慧型指標和動態記憶體

在c 中,動態記憶體的管理是通過一對運算子來完成的。new在動態記憶體中為物件分配空間並返回乙個指向該記憶體物件的指標。delete,接受乙個動態物件的指標,銷毀該物件,並釋放與之關聯的記憶體!為什麼要用智慧型指標?動態記憶體的使用很容易出現問題,因為確保在正確的時間釋放記憶體是極其困難的。有時候我...

動態記憶體與智慧型指標

動態記憶體與智慧型指標 靜態記憶體用來儲存區域性static物件 類static資料成員以及定義在任何函式之外的變數 全域性變數 棧記憶體用來儲存定義在函式內的非static物件。分配在靜態或棧記憶體中的物件由編譯器自動建立和銷毀。對於棧物件,僅在其定義的程式塊執行時才存在 static物件在使用之...

動態記憶體與智慧型指標

在c 中,動態記憶體的管理是通過一對運算子來完成的 new,在動態記憶體中為物件分配空間並返回乙個指向該物件的指標,我們可以選擇對物件進行初始化 delete,接受乙個動態物件指標,銷毀該物件並釋放與之關聯的記憶體。動態記憶體在使用時很容易出問題,有時會忘記釋放記憶體,造成記憶體洩露,有時在尚有指標...