1. 程式人生 > >【C++】淺談boost庫智慧指標

【C++】淺談boost庫智慧指標

#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 也相應失效。
weak_ptr解決迴圈引用的實現過程如下:
以上就是我對智慧指標的理解,因為看的資料不是很多,如果文中出現什麼錯誤的話,請務必指出~~~~~~~