C 智慧型指標用法小結

2021-07-27 15:11:28 字數 983 閱讀 9277

智慧型指標的出現,讓很多記憶體洩漏的隱患降低了不少,但是本人真的非常非常不推薦大面積鋪開使用智慧型指標這個東西,這個東西一是效能不如老老實實new ,delete,而且一旦沒用用好,反而適得其反。

但是畢竟智慧型指標也是很多人在用,作為複習進行一下小結。

//已經完全可以淘汰的auto_ptr就不說了,沒人會用這個過時貨

1.std::shared_ptr 這個智慧型指標是重點中的重點了,但是 c++11 之後才正式出來,如果是c++ 99的那種編譯器是不行的。

用法很簡單

std::shared_ptrpint(new myclass());//把乙個new出來物件弄到智慧型指標中去

myclass *h = pint.get();//這個方法是獲取智慧型指標指向的當前記憶體物件

std::shared_ptrpint2 = pint;//這樣乙個過程引用計數就加1

pint.use_count();//檢視智慧型指標總共有幾個副本引用

pint.unique();//檢視是否只有唯一的引用,也就是引用計數為1

如上**在乙個大括號結束之後,智慧型指標降自動釋放

2.std::unique_ptr基本可以理解為std::shared_ptr 的乙個子集變種,他表現為引用計數最大就只能1個

3.std::weak_ptr 按名字理解就是弱引用,可以說是對std::shared_ptr 乙個補充,和修補方案吧(至少看起來很像)

std::weak_ptrwp2;

std::shared_ptrgg(new myclass());

wp2=gg;//std::weak_ptr 可以表示弱引用,不增加引用計數,所以std::weak_ptr往往是接過std::shared_ptr的物件,而不產生引用計數的疊加

wp2.expire()//判斷物件是否釋放掉了

std::shared_ptrg=wp2.lock();//獲得記憶體物件,並把物件引用傳遞給新的智慧型指標g,這樣如果wp2的物件沒有釋放,將會增加引用計數

智慧型指標小結

智慧型指標的存在是為了巧妙的解決程式設計過程中資源洩露的問題,利用了棧的特性,出棧之後物件會自動析構的特點來對資源進行有效的釋放。主要存在的有兩大類智慧型指標,帶引用計數的智慧型指標和不帶引用技術的智慧型指標 不帶引用的智慧型指標 auto ptr scoped ptr unique ptr 以及帶...

C 智慧型指標 shared ptr用法

主要如下 1 建立出來後,在生命週期結束後自動釋放並呼叫物件的析構函式。2 理解shared的意義,多個智慧型指標可以共享乙個物件,其體現在shared ptr的use count 計數上,每多乙個智慧型指標,計數就加1,每結束乙個智慧型指標則減1,只有當use count 為0時這個指標指向空間才...

C 控制代碼類(智慧型指標)小結

控制代碼類作用主要有兩個 控制代碼類儲存和管理基類指標,指標既可以指向基類型別物件又可以指向派生型別物件。使用者通過控制代碼類訪問繼承層次的操作,使用者 可以獲得動態行為 同時能夠確保自動正確的銷毀動態分配的物件,防止記憶體洩露。c primer 15.7節中用購物籃的例子說明 了c 不能通過物件 ...