shared_ptr真是個好東西,可是你知道濫用的後果嗎?
自從Boost推出shared_ptr后,c++標準也做了這麼個東西,大批的程序員為之叫好,以為內存管理的問題終於不再操心了,but, 後面還是出現了內存泄露的問題,看下圖:
我在A和B的析構裡面都打了輸出,實際的運行結果是根本沒有任何輸出,查看內存發現, a和b的強引用都是2,那麼main函數結束的話還剩下1:
這種情況稱為循環引用,那麼如何解決這個問題呢?
template<class _Tp> class weak_ptr可以解決循壞引用帶來的弊端.
把A類和B類中的std::shared_ptr換成std::weak_ptr試試看:
運行結果:
所以,為了安全起見,使用的基本原則是:誰來分配對象,誰就負責釋放對象,其他使用對象的地方都用wrak_ptr。
Advertisements
再貼上weak_ptr的使用方式: