動態記憶體與智慧型指標

2021-09-17 07:17:20 字數 700 閱讀 3528

智慧型指標的行為類似常規指標,重要的區別是它負責自動釋放所指向的物件。新標準庫提供的兩種智慧型指標的區別在於管理底層指標的方式:shared_ptr允許多個指標指向同乙個物件;unique_ptr則獨佔所指向的物件。標準庫定義的weak_ptr伴隨類,是一種弱引用,它指向shared_ptr所管理的物件。

shared_ptrunique_ptr都支援的操作:

shared_ptr獨有操作:

接受指標引數的智慧型指標的建構函式時explicit的。因此必須使用直接初始化的形式:

shared_ptr< int > p1 = new int(1024); // 錯誤:必須使用直接初始化

shared_ptr< int > p2(new int(1024)); // 正確:使用了直接初始化形式

不要混合使用普通指標和智慧型指標…: shared_ptr 可以協調物件的析構,但這僅限於其自身的拷貝(shared_ptr之間的拷貝)。

也不要使用get初始化另乙個智慧型指標或為智慧型指標賦值: 只能在確定**不會delete指標的情況下,才能使用get。特別是,永遠不要使用get初始化另乙個智慧型指標或者為另乙個智慧型指標賦值。

定義和改變shared_ptr的其它方法:

動態記憶體與智慧型指標

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

動態記憶體與智慧型指標

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

動態記憶體與智慧型指標

我們先來看一些物件的生存期。全域性物件在程式啟動時分配,在程式結束時銷毀。區域性static物件在第一次使用前分配,在程式結束時銷毀。區域性自動物件,在進入其定義所在的程式塊兒時被建立,離開塊時銷毀。即,它們都是由編譯器自動建立與銷毀。而動態分配的物件的生存期與它們在 建立的無關,只有當顯式地被釋放...