三個智慧型指標模板: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...