#include "iostream.h"
class DestructionStatusReceiver
{
public:
DestructionStatusReceiver ( ) : m_destructionHasProblem (0) { }
virtual void DestructionBad ( ) { m_destructionHasProblem = 1 ; }
virtual ~DestructionStatusReceiver ( ) { }
protected:
int m_destructionHasProblem ;
} ;
class A ;
class B : public DestructionStatusReceiver
{
public:
//B class may choose to override virtual DestructionBad ( )
B ( ) ;
~B ( ) ;
A * m_ptrA ;
} ;
class A
{
public:
A ( DestructionStatusReceiver *ptrDSR ): m_ptrDSR ( ptrDSR ) { }
~A ( ) ;
DestructionStatusReceiver * m_ptrDSR ;
} ;
A::~A ( )
{
cout << "~A" << endl ;
m_ptrDSR->DestructionBad ( ) ; //to notifiy that A destruction encouters
//something bad.
}
B::B ( ) : DestructionStatusReceiver ( )
{
m_ptrA = new A ( this ) ;
}
B::~B ( )
{
cout << "~B" << endl ;
delete m_ptrA ;
if ( m_destructionHasProblem == 1 )
{
cout << "destruction of A data member encountered problem!" << endl ;
}
}
int main ( void )
{
B * ptrB = new B ;
delete ptrB ;
/*
putput:
~B
~A
destruction of A data member encountered problem!
*/
}