У меня есть два класса, A и B, которые имеют shared_ptr, указывающие друг на друга (A имеет shared_ptr для B, B имеет shared_ptr для A).Деструктор из взаимно-рекурсивного класса с shared_from_this не называется
Я пытаюсь получить деструктор обоих классов, вызываемых при выходе из области действия, но он не работает. Деструктор не называется.
Вот пример кода:
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;
}
Как я мог это исправить?
Звучит как ожидаемое поведение для меня, они никогда не выходят за рамки, поскольку они вечно ссылаются друг на друга. –
вот что значит 'weak_ptr' для – BeyelerStudios