c++ 中的四個智慧型指標分別是
1.shared_ptr
2.unique_ptr
3.weak_ptr
4.auto_ptr(已經被c++11棄用)(在c++11的環境中會爆警告warning: 'auto_ptr' is deprecated)
智慧型指標的作用是管理乙個指標。
因為存在以下這種情況:申請的空間在函式結束時忘記釋放,造成記憶體洩漏。
使用智慧型指標可以很大程度上的避免這個問題,因為智慧型指標就是乙個類,當超出了類的作用域是,類會自動呼叫析構函式,析構函式會自動釋放資源。所以智慧型指標的作用原理就是在函式結束時自動釋放記憶體空間,不需要手動釋放記憶體空間。
所以智慧型指標的設計思想簡單的來說就是:將基本型別指標封裝成類(模板類)物件指標,並且在析構函式裡編寫delete語句刪除指標所指向的記憶體空間
智慧型指標所在的標頭檔案:#include
templetclass auto_ptr
所以智慧型指標的呼叫都只能顯示呼叫
eg:
#includeusing namespace std;
int main()
經常容易犯錯的地方:
#includeusing namespace std;
int main()
這裡我們定義的a用的是棧記憶體,在pt過期時,程式將把delete運算子用於非堆記憶體,這是錯誤的
(1)如果程式要使用多個指向同乙個物件的指標,應選擇shared_ptr。這樣的情況包括:
(2)如果程式不需要多個指向同乙個物件的指標,則可使用unique_ptr。
如果函式使用new分配記憶體,並返還指向該記憶體的指標,將其返回型別宣告為unique_ptr是不錯的選擇。
這樣,所有權轉讓給接受返回值的unique_ptr,而該智慧型指標將負責呼叫delete。可將unique_ptr儲存到stl容器在那個,只要不呼叫將乙個unique_ptr複製或賦給另乙個演算法(如sort())。
在unique_ptr為右值時,可將其賦給shared_ptr,這與將乙個unique_ptr賦給乙個需要滿足的條件相同。
模板shared_ptr包含乙個顯式建構函式,可用於將右值unique_ptr轉換為shared_ptr。shared_ptr將接管原來歸unique_ptr所有的物件。
eg:
#includeusing namespace std;
unique_ptrget_int(int n)
int main()
C 中的智慧型指標
長久以來 c 最被人詬病的就是它的記憶體管理,寫個稍微複雜點的程式就經常會碰到記憶體洩漏問題。為了解決這個問題,c 也做了許多努力。在 c 98 標準中首先提出了智慧型指標的概念,引入了 auto ptr。但是在實踐中,auto ptr 有不少問題。因此在 c 11 標準中對原有的智慧型指標又做了進...
c 中的智慧型指標
1.智慧型指標的作用 為了防止記憶體洩露的問題 c 程式設計中使用堆記憶體是非常頻繁的操作,堆記憶體的申請和釋放都由程式設計師自己管理。程式設計師自己管理堆記憶體可以提高了程式的效率,但是整體來說堆記憶體的管理是麻煩的,c 11中引入了智慧型指標的概念,方便管理堆記憶體。使用普通指標,容易造成堆記憶...
c 智慧型指標
auto prt 它是 它所指向物件的擁有者 所以當自身物件被摧毀時候,該物件也將遭受摧毀,要求乙個物件只有乙個擁有者,注意 auto prt 不能使用new 來分配物件給他 include include using namespace std template void bad print au...