shared_ptr真是個好東西,可是你知道濫用的後果嗎?

自從Boost推出shared_ptr后,c++標準也做了這麼個東西,大批的程序員為之叫好,以為內存管理的問題終於不再操心了,but, 後面還是出現了內存泄露的問題,看下圖:

圖1

我在A和B的析構裡面都打了輸出,實際的運行結果是根本沒有任何輸出,查看內存發現, a和b的強引用都是2,那麼main函數結束的話還剩下1:

圖2

這種情況稱為循環引用,那麼如何解決這個問題呢?

template<class _Tp> class weak_ptr可以解決循壞引用帶來的弊端.

把A類和B類中的std::shared_ptr換成std::weak_ptr試試看:

圖3

運行結果:

圖4

圖5

所以,為了安全起見,使用的基本原則是:誰來分配對象,誰就負責釋放對象,其他使用對象的地方都用wrak_ptr。

Advertisements

再貼上weak_ptr的使用方式:

圖6

圖7

圖8

Advertisements

你可能會喜歡