除了動態物件,我們編寫的所有物件(自動和static物件)都存在嚴格的生存期,全域性物件在程式啟動時分配,在程式結束時銷毀。對於區域性自動物件,當我們進入其所在的程式塊時被建立,在離開塊時銷毀。區域性static物件在第一冊使用前分配,在程式結束時銷毀。
動態分配的物件的生存週期與它們在**建立是無關的,只有當顯式地被釋放時,這些對像才會銷毀。
靜態記憶體用來儲存區域性static物件、類static資料成員以及定義在任何函式之外的變數。站內次用來儲存定義在函式內的非static物件,分配在靜態或棧記憶體中的物件由編譯器自動建立和銷毀,對於棧物件,盡在其定義的程式塊執行時猜存在;static物件在使用前分配,在程式結束時銷毀。
除了靜態記憶體和棧記憶體,每個程式還擁有乙個記憶體池,這部分記憶體被稱為自由空間或堆,程式用堆在儲存動態分配的物件,即那些在程式執行時分配的物件。動態物件的生存期由程式來控制,也就是說,當動態物件不再使用時,我們的**必須顯示地銷毀它們。
動態記憶體的管理是通過一對運算子來完成的:new,在動態記憶體中為物件分配空間並返回乙個指向物件的指標。delete接受乙個動態物件的指標,銷毀物件,並釋放與之相關聯的記憶體。
為了更容易(也更安全)的使用動態記憶體,智慧型指標型別來管理物件,有:shared_ptr允許多個個針指向同一物件,unique_ptr 則「獨霸」所指向物件。
c 智慧型指標
auto prt 它是 它所指向物件的擁有者 所以當自身物件被摧毀時候,該物件也將遭受摧毀,要求乙個物件只有乙個擁有者,注意 auto prt 不能使用new 來分配物件給他 include include using namespace std template void bad print au...
c 智慧型指標
很久沒寫部落格了,不知道如何表達了,哈哈.我先介紹一下深淺拷貝.class copy 此時a.ptr和b.ptr指向同乙個物件,當我們delete a.ptr時 b.ptr所指向的物件已經不存在了,要是我們引用b.ptr指向的物件也就會出問題了.深拷貝 把a.ptr所指向的物件拷貝乙份給b.ptr ...
c 智慧型指標
記得前不久有一次面試被問到智慧型指標的實現,當時對智慧型指標只是聽說但沒有了解過,就亂七八糟地說了一遍。今天寫了一遍智慧型指標,用了引用計數的概念。主要思想就是,用乙個新類對原本需要的型別進行了一層封裝,這個新類中儲存了原本的物件指標和乙個引用計數的指標,之所以全部用指標來儲存,就是因為會出現多個新...