我有以下應用程式結構:BOOST共享指針導致冗餘參考刪除
/// CLASS VIEW3D.h
class View3D;
typedef boost::shared_ptr<View3D> ViewSP;
class View3D
{
public:
View3D(void);
};
/// CLASS SCREENQUAD.h
class ScreenQuad
{
public:
ScreenQuad(ViewSP view);
~ScreenQuad(void);
protected:
ViewSP _viewSP;
};
/// CLASS VIEW3D.cpp
View3D::Init(ViewSP view)
{
_screenQuadSP=new ScreenQuad(view);
}
/// CLASS SCREENQUAD.cpp
ScreenQuad::ScreenQuad(ViewSP view):
_viewSP(view)
{
assert(_viewSP);
}
現在,我通過A
類的參考成B
類以共享指針的形式並將其保存在全局變量A_SP
中。當應用程序拍攝下來我得到這個:
HEAP: Free Heap block 2837920 modified at 2837b5c after it was freed
調試我發現,類A
析構函數被調用後,它被再次調用時B
類的析構函數是執行後executed.So我的猜測是,該提升嘗試釋放指針封裝在中的地址處的內存。 只需注意:破壞的順序是A
第一類,然後B
類。
我該如何解決它?不應該shared_ptr
保持引用計數並且不觸發已經釋放的對象的析構函數?
您能否提供一個簡短的可編譯示例來重現您描述的行爲? – us2012 2013-03-03 12:25:59
錯誤很多:分號丟失,導致下劃線 - 大寫字母保留... – 2013-03-03 12:26:02
好吧,它只是一個僞代碼... – 2013-03-03 12:26:25