Witam,
Był podobny temat, ale 2 lata temu i dlatego decydowałem się na nowy wątek.
using namespace std;
class B;
class A
{
public:
A() {};
~A()
{
cout << " A is destroyed" << endl;
}
};
class B
{
public:
B() : m_sptrA(nullptr) { };
~B()
{
cout << " B is destroyed" << endl;
}
shared_ptr<A> m_sptrA;
};
//***********************************************************
void main()
{
{
shared_ptr<B> sptrB(new B);
shared_ptr<A> sptrA(new A);
//With this line order of destructors is replaced.
//sptrB->m_sptrA = sptrA;
}
getchar();
}
Kiedy shared_ptr sptrA zostaje przypisane do pola m_sptrA, kolejność wywoływania destruktów zostaje zamieniona. Czy ktoś potrafiłby wytłumaczyć jaki mechanizm się za tym kryje ?