Before we go further, let's look at this Data object that's causing all the fuss.
class DataBase
{
public:
DataBase (void)
{
ACE_DEBUG ((LM_DEBUG, "(%P|%t) DataBase ctor 0x%x\n", (void *) this));
}
virtual ~ DataBase (void)
{
ACE_DEBUG ((LM_DEBUG, "(%P|%t) DataBase dtor 0x%x\n", (void *) this));
}
void who_am_i (void)
{
ACE_DEBUG ((LM_DEBUG, "(%P|%t) DataBase instance 0x%x\n", (void *) this));
}
virtual void what_am_i (void)
{
ACE_DEBUG ((LM_DEBUG, "(%P|%t) I am a DataBase object\n"));
}
};
class Data : public DataBase
{
public:
Data (void)
: message_ (-1)
{
ACE_DEBUG ((LM_DEBUG, "(%P|%t) Data ctor 0x%x\n", (void *) this));
}
Data (int message)
: message_ (message)
{
ACE_DEBUG ((LM_DEBUG, "(%P|%t) Data ctor 0x%x for message %d\n", (void *) this, message_));
}
virtual ~ Data (void)
{
ACE_DEBUG ((LM_DEBUG, "(%P|%t) Data dtor 0x%x\n", (void *) this));
}
void what_am_i (void)
{
ACE_DEBUG ((LM_DEBUG, "(%P|%t) I am a Data object for message %d\n", message_));
}
protected:
int message_;
};
Ok, no mysterious magic on this one. Just a simple object and derivative that report their existence.