私の理解によると、すべての 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() を使って共有ポインタを作成したところ、ref カウントが 2 になりました。私の理解が正しいかどうか教えてください。