【C++】淺談boost庫智慧指標
阿新 • • 發佈:2019-02-19
#include<iostream> using namespace std; #include<boost/shared_ptr.hpp> #include<boost/weak_ptr.hpp> //雙向連結串列 struct Node { Node(int data)//構造 :value(data) { cout<<"Node()"<<endl; } ~Node()//析構 { cout<<"~Node()"<<endl; } //boost::shared_ptr<Node>_pre; //boost::shared_ptr<Node>_next; boost::weak_ptr<Node>_pre; boost::weak_ptr<Node>_next; int value; }; void FunTest() { boost::shared_ptr<Node>p1(new Node(1)); boost::shared_ptr<Node>p2(new Node(2)); cout<<p1.use_count()<<endl; cout<<p2.use_count()<<endl; p1->_next = p2; p2->_pre = p1; cout<<p1.use_count()<<endl; cout<<p2.use_count()<<endl; } int main() { FunTest(); return 0; }
執行結果如下: 注意: weak_ptr被設計為與shared_ptr共同工作,可以從一個shared_ptr或者另一個weak_ptr物件構造而來,weak_ptr不能獨立管理空間,它必須依附在shared_ptr之上,通過shared_ptr的物件來給weak_ptr賦值。weak_ptr是為了配合shared_ptr而引入的一種智慧指標,它更像是shared_ptr的一個助手而不是智慧指標,因為它不具有普通指標的行為,沒有過載operator*和->,因此取名為weak,表明其是功能較弱的智慧指標。它的最大作用在於協助shared_ptr工作,可獲得資源的觀測權,像旁觀者那樣觀測資源的使用情況。觀察者意味著 boost::weak_ptr 只對 boost::shared_ptr 進行引用,而不改變其引用計數use_count,當被觀察的 boost::shared_ptr 失效後,相應的 boost::weak_ptr 也相應失效。
以上就是我對智慧指標的理解,因為看的資料不是很多,如果文中出現什麼錯誤的話,請務必指出~~~~~~~