我正在試圖找到在代碼中使用shared_ptr和weak_ptr的方法。我有兩個班 - 一班和二班。兩個在一個內部類。第二類的構造函數如下所示接收第一類的weak_ptr並將其存儲以備後用。將此指針作爲weak_ptr傳遞給內部類
Class One
{
Class Two
{
private:
std::weak_ptr<One> m_wptrOne;
public:
Two(std::weak_ptr<One> wptrOne)
{
m_wptrOne = wptrOne;
/* m_wptr is used later by class Two if not expired and valid ofcourse */
}
}; // End Class Two
.....
void foo()
{
std::shared_ptr sptrOne(this);
Two obj(sptrOne);
.... /* do my work */
} // Program crashes when foo terminates
}; //End Class One
我得到一個崩潰時,我的函數foo的回報,因爲我覺得「特徵碼」試圖釋放「這個」指針並認爲這是它唯一的主人。
我該如何解決這個問題?或者,我的程序在架構上不正確?任何建議將不勝感激。
謝謝,
圖莎爾
google'enable_shared_from_this'(C++ 11/Boost for '03)安全地創建了一個指向'this'的共享指針 – mythagel
我曾嘗試過,但沒有奏效。它崩潰在我稱之爲shared_from_this() –
我認爲shared_from_this需要將該對象創建爲共享指針本身。在我的情況下,我在堆棧上創建Object One,而不是作爲共享指針。我不想強制我的圖書館用戶在堆上創建對象作爲共享指針。 –