Здравствуйте. Подскажите почему не работает следующий код:
#include <memory>
#include <iostream>
class B;
class A {
public:
A()
{
std::cout << "A::A()" << std::endl;
}
~A()
{
std::cout << "A::~A()" << std::endl;
}
std::shared_ptr< B > m_b;
};
class B {
public:
B()
{
std::cout << "B::B()" << std::endl;
}
~B()
{
std::cout << "B::~B()" << std::endl;
}
std::shared_ptr< A > m_a;
};
void main()
{
std::shared_ptr< A > a( new A );
std::shared_ptr< B > b( new B );
a->m_b = b;
b->m_a = a;
std::cout << "A use count: " << a.use_count() << std::endl;
std::cout << "B use count: " << b.use_count() << std::endl;
a = nullptr;
b = nullptr;
std::cout << "A use count: " << a.use_count() << std::endl;
std::cout << "B use count: " << b.use_count() << std::endl;
}
Вывод следующий:
A::A()
B::B()
A use count: 2
B use count: 2
A use count: 1
B use count: 1