C 程式設計智慧型指標迴圈引用解決

2021-06-14 18:24:20 字數 868 閱讀 7023

字型大小:小

大 2012-10-23 15:55

c++中智慧型指標的引入,使得開發人員在與記憶體的鬥爭中佔據上峰。然而凡事都不會盡善盡美,智慧型指標的迴圈引用缺陷還是會引發令人談虎色變的記憶體洩露。本文的內容就是講述,如何解決迴圈引用帶來的記憶體問題。

背景:智慧型指標採用boost庫,語言c++,開發工具vs2005,示例程式為win32程式。

關於boost庫的使用,可見另一篇文章

迴圈引用示例

#include "stdafx.h"

#include

#include

#include

#include

using namespace std;

using namespace boost;

class ccycleref

public:

shared_ptr selfref;

};void cyclereftest()

int _tmain(int argc, _tchar* argv)

執行結果:

reference count:2

建立的ccycleref物件沒有釋放掉。

原因是ccycleref類進行了自引用,引用計數增加所致。

迴圈引用解決

引入weak_ptr弱引用指標即可解決迴圈引用問題。weak_ptr不會修改引用計數。

修改ccycleref類。

class ccycleref

public:

weak_ptr selfref;

};執行結果

reference count:1

destroying ccycleref

建立的ccycleref物件已被釋放。

智慧型指標的迴圈引用與解決

class node node private int value int main 上面的程式不會有問題,呼叫三次建構函式,三次析構函式。下面增加乙個指向父節點的指標。class node node private int value int main 呼叫了三次建構函式,但是沒用呼叫析構函式,這...

智慧型指標的死穴 迴圈引用

c 最新標準c 11中已將基於引用計數的智慧型指標share prt收入囊中,智慧型指標的使用門檻越來越低,不需要使用boost庫,我們也能輕鬆享受智慧型指標給我們帶來的方便。智慧型指標,正如它的名字一樣,似乎是個近乎完美的聰明角色,程式設計師不用再糾結於new出來的內存在哪釋放比較合適這種問題。比...

迴圈引用 智慧型指標的死穴之一

智慧型指標的實現思路也體現了c 基於物件的原則,物件應該為自己管理的資源負責,包括資源的分配與釋放,而且最好將資源的釋放與分配搞的自動化一點,典型的實現方法就是在建構函式裡分配資源,在析構函式裡釋放資源,這樣當其他程式設計師在使用這個物件時,該物件的資源問題幾乎不用額外的操心,即優雅又方便 然後如此...