Ich habe zwei Klassen, A und B, die ein shared_ptr haben, das zueinander zeigt (A hat ein shared_ptr zu B, B hat ein shared_ptr zu A).Destruktor von gegenseitig rekursiver Klasse mit shared_from_this nicht
Ich versuche, den Destruktor beider Klassen aufgerufen zu bekommen, wenn man aus dem Geltungsbereich herauskommt, aber es funktioniert nicht. Kein Destruktor wird aufgerufen.
Hier ist ein Beispielcode:
class B;
class A
{
public:
A() { std::cout << "Constructor A" << std::endl; }
~A() { std::cout << "Destructor A" << std::endl; }
std::shared_ptr<B> b;
};
class B
{
public:
B() { std::cout << "Constructor B" << std::endl; }
~B() { std::cout << "Destructor B" << std::endl; }
std::shared_ptr<A> a;
};
int main()
{
std::shared_ptr<A> a = std::make_shared<A>();
a->b = std::make_shared<B>();
a->b->a = a;
}
Wie könnte ich dieses Problem beheben?
Klingt wie erwartetes Verhalten für mich, sie gehen nie aus dem Rahmen, da sie sich ewig gegenseitig referenzieren. –
Dafür ist 'weak_ptr' gedacht – BeyelerStudios