Я сейчас нахожусь в ситуации, подобной:
struct A {
shared_ptr<B> b;
};
struct B {
shared_ptr<A> a;
};
//...
shared_ptr<A> a(new A());
shared_ptr<B> b(new B());
a->b(b);
b->a(a);
Я знаю, что это не сработает, потому что ссылки будут продолжать указывать друг на друга. Мне также сказали, что weak_ptr
решает эту проблему.
Однако, weak_ptr
не имеет перегрузки get или ->
. Я слышал упоминания об «использовании lock()
», но кто-нибудь может привести примеры кода, как это сделать правильно?