根据我的理解,如果我们使用所有 shared_ptr 对象并且如果存在循环依赖,则使用弱指针来解决循环依赖问题。弱指针用于打破循环。弱指针通过使用将创建共享指针的 lock() 来实现这一点。
class A { shared_ptr<B> b; ... };
class B { weak_ptr<A> a; ... };
shared_ptr<A> x(new A); // +1
x->b = new B; // +1
x->b->a = x; // No +1 here
但是现在假设我创建了调用 x->b->a.lock() 的锁,所以 x 的引用计数将变为 2。如果 x 离开范围,仍然会有内存泄漏对吗?因为我使用 lock() 创建了一个共享指针,并且引用计数变为 2。请让我知道我的理解是否正确。