Witam,
Uczę się ostatnio smart pointerów. Znalazłem taki przykład :
class B;
class A
{
public:
A( ) : m_sptrB(nullptr) { };
~A( )
{
cout<<" A is destroyed"<<endl;
}
shared_ptr<B> m_sptrB;
};
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 );
sptrB->m_sptrA = sptrA;
sptrA->m_sptrB = sptrB;
}
W takim przypadku gdy dwie klasy wskazują na siebie nawzajem nastąpi wyciek pamięci. Rozumiem, że aby temu zapobiec powinienem skorzystać z weak_ptr. Nie rozumiem tylko dlaczego tak się dzieje, dlaczego licznik referencji w shared pointer nie może dojść do zera i tym samym usunąć obiektów. Czy ktoś mógłby mi to łopatologicznie wytłumaczyć?