C 弱智能指標(weak ptr)

2021-09-14 02:06:57 字數 2004 閱讀 5597

弱智能指標:

一般結合強智慧型指標使用,它指向乙個 shared_ptr 管理的物件. 進行該物件的記憶體管理的是強引用的 shared_ptr. weak_ptr只是提供了對管理物件的乙個訪問手段;weak_ptr 設計的目的是為配合 shared_ptr 而引入的一種智慧型指標來協助 shared_ptr 工作, 不會引起引用記數的增加或減少。

針對于強智慧型指標(shared_ptr )相互引用會出現記憶體無法釋放的情況,加入弱智能指標(weak_ptr)。

#includeusing namespace std;

class refmanage

private:

refmanage() :length(0)

{} refmanage(const refmanage& rhs);

public:

void addref(void* ptr)

else

}} void delref(void* ptr)

else

}} }

int getref(void* ptr)

int index = find(ptr);

if (index < 0)

else

}private:

int find(void* ptr)

}return -1;

} class node

node()

public:

void* addr;

int refcount;

}; node arr[5];

int length;//有效節點個數 當前要插入的節點下標

static refmanage rm;

};refmanage refmanage::rm;//在main函式呼叫之前就生成 .data

templateclass shardptr

shardptr(const shardptr& rhs):mptr(rhs.mptr)

shardptr& operator=(const shardptr& rhs)

mptr = rhs.mptr;

addref();//相當於this指標呼叫

}return *this;

}t* getptr()const

~shardptr()

mptr = null;

} t* operator->()

t* operator*()

private:

void addref()

void delref()

int getref()

t* mptr;

static refmanage* rm;

};templaterefmanage* shardptr::rm = refmanage::getinstance();

templateclass weakptr

weakptr(const weakptr& rhs) :mptr(rhs.mptr) {}

weakptr& operator=(const shardptr& rhs)// 弱智能指標=強智慧型能指標

~weakptr() {}

t* operator->()

t& operator*()

private:

t * mptr;

};class b;

class a

~a()

weakptrpb;

};class b

~b()

weakptrpa;

};int main()

列印結果:

解釋:

C 弱智能指標weak ptr詳解

在最早有介紹關於智慧型指標的博文,但並未深入 弱智能指標的存在,這是簡單提到它是來配合強智慧型指標一起使用,且不可以單獨使用,所以對於弱智能指標它的作用就是解決強智慧型指標之間的相互引用而存在的。那,本文主要介紹關於弱智能指標weak ptr的一些東西 關於 weak ptr,weak ptr是伴隨...

C 智慧型指標 weak ptr

weak ptr 是一種不控制物件生命週期的智慧型指標,它指向乙個 shared ptr 管理的物件.進行該物件的記憶體管理的是那個強引用的 shared ptr.weak ptr只是提供了對管理物件的乙個訪問手段.weak ptr 設計的目的是為配合 shared ptr 而引入的一種智慧型指標來...

智慧型指標weak ptr

智慧型指標weak ptr主要用來協助shared ptr。不參與引用計數,但是有以下好處 1 打破遞迴的依賴關係 2 使用乙個共享的資源但是不要所有權,不新增引用計數 3 避免懸空指標。使用方法有二 方法一 boost shared ptrsp new std string method1 從sh...