私の質問はshared_ptr と weak_ptr の違いに似ていると思いますが、違いのリストではなく、それらがどのように連携するかを見ることに興味があります。
Wikipedia のshared_ptr および 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
私は、何らかのオブジェクトが objectを指しb
、b
どういうわけかa
(weak_ptr
チェーンを壊すために有向グラフエッジの 1 つの間にシムを入れて) を指していることを期待していたでしょう。
例は良くて、私の考えは悪いですか? または、問題と解決策のより良い例はありますか?