我認爲我的問題與類似,但我很感興趣的是看它們是如何一起工作的,而不是差異列表。shared_ptr,weak_ptr和循環依賴關係
維基百科上關於shared_ptr and weak_ptr狀態weak_pointer
頁可以用來解決循環依賴問題,並給出了一個例子:
std::shared_ptr<int> p1(new int(5));
std::weak_ptr<int> wp1 = p1; //p1 owns the memory.
{
std::shared_ptr<int> p2 = wp1.lock(); //Now p1 and p2 own the memory.
if(p2) //Always check to see if the memory still exists
{
//Do something with p2
}
} //p2 is destroyed. Memory is owned by p1.
p1.reset(); //Memory is deleted.
std::shared_ptr<int> p3 = wp1.lock(); //Memory is gone, so we get an empty shared_ptr.
if(p3)
{
//Will not execute this.
}
但我沒有看到一個圓形的依賴,所以我不明白weak_pointer
如何解決這個問題。
我本來期望看到一些對象a
指向對象b
,和以某種方式b
指回a
(具有weak_ptr
勻在有向圖的一個邊緣之間打破鏈)。
這個例子很好,我的想法很糟糕嗎?還是有更好的問題和解決方案的例子?
「_state weak_pointer可以用來解決循環依賴問題_」,兩者都是完全錯誤的;弱引用的用途很少,並且循環依賴不是一個 – curiousguy