我认为我的问题类似于shared_ptr 和 weak_ptr 差异,但我有兴趣了解它们如何协同工作,而不是差异列表。
维基百科关于shared_ptr 和 weak_ptr state a的页面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
解决问题。
我本来希望看到一些 objecta
指向一个 object b
,并b
以某种方式指向a
(weak_ptr
在一个有向图边缘之间有一个垫片以打破链)。
这个例子是好的,我的想法是坏的吗?还是有更好的问题和解决方案示例?