Döngüsel referansları kırmak için zayıf_pointerların kullanılabildiğini okudum.Nasıl zayıf_ptr kullanarak shared_ptr döngüsel referansı kırılır?
döngüsel referans Şimdi yukarıdaki
struct A
{
boost::shared_ptr<A> shrd_ptr;
};
boost::shared_ptr<A> ptr_A(boost::make_shared<A>());
boost::shared_ptr<A> ptr_b(boost::make_shared<A>());
ptr_A->shrd_ptr = ptr_b;
ptr_b->shrd_ptr = ptr_A;
döngüsel bir referans durumdur örneğini düşünelim ve ben weak_ptr
kullanarak yukarıdaki döngüsel başvuru kırabilir nasıl bilmek istedi?
Güncelleme:
struct A
{
boost::weak_ptr<A> wk_ptr;
};
boost::shared_ptr<A> ptr_A (boost::make_shared<A>());
boost::shared_ptr<A> ptr_B (boost::make_shared<A>());
ptr_A->wk_ptr = ptr_B;
ptr_B->wk_ptr = ptr_A;
Bu doğru bir yaklaşım olacaktır: öneri dayanarak aşağıdaki ile geldi alınan? Her iki referanslar A
olduğunu söylüyor o zaman shared_ptr
ise
#include <memory>
#include <iostream>
struct B;
struct A {
std::shared_ptr<B> b;
~A() { std::cout << "~A()\n"; }
};
struct B {
std::shared_ptr<A> a;
~B() { std::cout << "~B()\n"; }
};
void useAnB() {
auto a = std::make_shared<A>();
auto b = std::make_shared<B>();
a->b = b;
b->a = a;
}
int main() {
useAnB();
std::cout << "Finished using A and B\n";
}
: Eğer A
A
bir referansı vardır B
bir referansı vardır iki sınıfları A
ve B
sahip olduğu
'A :: shrd_ptr' işlevini' boost :: weak_ptr' olarak değiştirin ve 'shared_ptr' başka bir yerde tutun. –