C 智慧型指標模板類

2021-09-10 02:51:54 字數 1088 閱讀 5096

三個智慧型指標模板:auto_ptr、unique_ptr、shared_ptr

條件

1、標頭檔案必須包含memory,#include;

2、智慧型指標模板位於命名空間std,std::或using namespace std;

三者的區別:

1、所有權。只能有乙個智慧型指標可以擁有乙個特定的物件。auto_ptr和unique_ptr都採用所有權策略。如果出現錯誤,auto_ptr結果是執行階段崩潰;unique_ptr結果是編譯時出錯。如果unique_ptr是臨時右值,編譯器允許通過。也可以使用std::move(),將乙個unique_ptr賦給另乙個。所以unique_ptr優於auto_ptr。

2、引用計數。賦值時,計數加1,指標過期時,計數減1,僅當最後乙個指標過期時,才呼叫delete。shared_ptr採用這種策略。

3、陣列的使用。auto_ptr和shared_ptr用於new,不能用於new[ ];unique_ptr可以用於new和new[ ] 。

如何選擇智慧型指標?

1、如果要使用多個指向同乙個物件的指標,應選擇shared_ptr。如果編譯器沒有shared_ptr,可使用boost庫提供的shared_ptr。

2、如果不需要多個指向同乙個物件的指標,則使用unique_ptr。如果編譯器沒有unique_ptr,可使用boost庫提供的scoped_ptr。

3、如果需要使用new[ ],則使用unique_ptr。

4、盡量避免使用auto_ptr。

舉例

auto_ptrpd (new double);

shared_ptrps (new string("hello world!");

unique_ptrps1,ps2;

ps1=demo("hello world!");

ps2=move(ps1);

ps1=demo("i am fine!");

cout<<*ps2<<*ps1<

C 之智慧型指標類模板

1 現代c 開發庫中最重要的類模板之一 2 c 中自動記憶體管理的主要手段 3 能夠在很大程度上避開記憶體相關的問題。1 生命週期結束時,銷毀指向的記憶體空間 2 不能指向堆陣列,只能指向堆物件 變數 3 一片堆空間只屬於乙個智慧型指標物件 4 多個智慧型指標物件不能指向同一片堆空間。例項分析1 i...

auto ptr模板類 智慧型指標

auto ptr模板類 auto ptr模板定義了類似指標的物件,可以將new獲得 直接或間接 的位址賦給這種物件。當auto ptr物件過期時,其析構函式將使用delete來釋放記憶體。要建立auto ptr物件,必須包含標頭檔案memory。使用通常的模板句法來例項化所需型別的指標。模板中包括 ...

智慧型指標類模板(中) Qt中的智慧型指標

qt中的智慧型指標 qpointer 當其指向的物件被銷毀時,它會被自動置空 析構時不會自動銷毀所指向的物件 qsharedpointer 引用計數型智慧型指標 可以被自由的拷貝和賦值 當引用計數為0時才刪除指向的物件 include include using namespace std clas...