Our Block object is a very simple derivative of the ACE_Message_Block. The only reason I created it was to prove that the message blocks to, indeed, get freed when we're done with 'em.
#include "ace/Message_Block.h"
/*
This simple ACE_Message_Block derivative will inform us of it's construction
and destruction. We'll use this to assure ourselves that we don't have any
memory leaks. In a real application, of course, this isn't necessary.
*/
class Block : public ACE_Message_Block
{
public:
Block (void)
{
ACE_DEBUG ((LM_DEBUG, "(%P|%t) Block ctor 0x%x\n", (void *) this));
}
Block (size_t size)
: ACE_Message_Block (size)
{
ACE_DEBUG ((LM_DEBUG, "(%P|%t) Block ctor 0x%x\n", (void *) this));
}
virtual ~ Block (void)
{
ACE_DEBUG ((LM_DEBUG, "(%P|%t) Block dtor 0x%x\n", (void *) this));
}
};
Ok, nothing really magic there. Some folks just feel a little uncomfortable not doing an explicit delete on objects they've new'd so I wanted to show you that the memory really does get cleaned up.