boost的shared ptr迴圈引用

2021-06-21 21:42:38 字數 1109 閱讀 8429

boost的智慧型指標給程式設計帶來了極大的便利,不需要關心記憶體的釋放,不要要呼叫delete,而且還可以定製delete的方法。其實boost的智慧型指標是可以當成scope_exit來用的,同樣是退出時處理。但是凡事都是有利有弊,boost的shared_ptr如果在迴圈引用的時候會出現無法釋放記憶體的情況,所謂迴圈引用就是a智慧型指標類裡存放b的智慧型指標,b的智慧型指標類裡存放a,將a、b的值互相設定。增加引用計數,在釋放的時候由於計數問題,會導致在退出指標域的時候無法進行釋放,解決該問題的方案是在類成員中使用弱指標。見如下例子

// circleref.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include #include using namespace std;

class objectb;

class objecta

private:

boost::shared_ptrm_objb;

};class objectb

private:

boost::shared_ptrm_obja;

};void test()

;int _tmain(int argc, _tchar* argv)

程式執行,不會呼叫各自的析構函式。若將其改為weak_ptr則不會引入多餘計數的問題,從而可以保證物件被正確釋放,看如下修改後的正確**:

// circleref.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include #include using namespace std;

class objectb;

class objecta

private:

boost::weak_ptrm_objb;

};class objectb

private:

boost::weak_ptrm_obja;

};void test()

;int _tmain(int argc, _tchar* argv)

Boost智慧型指標 shared ptr

boost scoped ptr雖然簡單易用,但它不能共享所有權的特性卻大大限制了其使用範圍,而boost shared ptr可以解決這一侷限。顧名思義,boost shared ptr是可以共享所有權的智慧型指標,首先讓我們通過乙個例子看看它的基本用法 該程式的輸出結果如下 the sample...

boost庫 shared ptr實際應用

1 記憶體 方式。預設的shared ptr以delete銷毀所擁有的裸指標,然而在實際應用中,特別是網遊伺服器這種存在著大批量物件建立 銷毀的工程,單一的銷毀方式就不再適用了。畢竟在上述環境下,採用memory pool做記憶體管理會更好。而這樣 動作也需由自己來控制,不再是單單乙個delete了...

Boost智慧型指標 shared ptr

boost scoped ptr雖然簡單易用,但它不能共享所有權的特性卻大大限制了其使用範圍,而boost shared ptr可以解決這一侷限。顧名思義,boost shared ptr是可以共享所有權的智慧型指標,首先讓我們通過乙個例子看看它的基本用法 include include inclu...