Listing 3

class DynamicObject
{
    private:
        // Callback function that should be called to delete dynamic object
        void (*_deleteObject)(void*);
    public:
        // The constructor sets the callback function to use
        DynamicObject(void (*delObj)(void*));

        // The destructor
        virtual ~DynamicObject(void);

        // Sends "this" to the callback destructor function.
        void deleteSelf(void);
};
DynamicObject::DynamicObject(void (*delObj)(void*))
    : _deleteObject(delObj)
{
}
DynamicObject::~DynamicObject(void)
{
}
void
DynamicObject::deleteSelf(void)
{
    (*_deleteObject)(reinterpret_cast<void*>(this));
}