shared_ptr 循環引用問題

前面學習智能指針的時候已經模擬實現過C++標準庫中的auto_ptr兩種方法,還有scoped_ptr(即boost庫中的unique_ptr)、scoped_array、以及shared_ptr。

現在我們對使用引用計數的shared_ptr進行分析,它存在以下問題:

1、引用計數更新存在着線程安全

2、循環引用問題

3、定製刪除器

首先貼出循環引用的代碼:

#include<boost/shared_ptr.hpp>
#include<boost/weak_ptr.hpp>
#include<iostream>
using namespace std;
using namespace boost;
struct Node
{
	shared_ptr<Node> _pre;
	shared_ptr<Node> _next;
	int _value;

	~Node()
	{
		cout<<"~Node()"<<endl;
	}
};
void FunTest()
{
	shared_ptr<Node> p1(new Node());
	shared_ptr<Node> p2(new Node());
	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();
	system("pause");
	return 0;
}
那麼這段代碼又存在着什麼問題呢?可以畫個圖來簡單說明下


爲了解決循環引用問題,boost庫中引入了一個弱引用智能指針(weak_ptr)來打破循環引用,weak_ptr不增加引用計數。

下面分析弱智能指針weak解決循環引用的具體實現細節





發佈了62 篇原創文章 · 獲贊 14 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章