#ifndef collect_alloc_h #define collect_alloc_h #include <stdlib.h> #include <iostream.h> class dyn_collectable; #ifdef NOBOOL typedef int bool; #define true 1 #define false 0 #endif class collect_alloc { friend class dyn_collectable; struct dc_link { dc_link( dyn_collectable* _dc, dc_link* _n ) { dc = _dc, n = _n; } ~dc_link(); dyn_collectable* dc; dc_link* n; } *objects; bool dieing; collect_alloc() : objects(0), dieing(false) {} void collect( dyn_collectable* ); static collect_alloc def_collector; public: ~collect_alloc(); static collect_alloc* default_collector(); }; class dyn_collectable { friend class collect_alloc; static collect_alloc* alloc; public: virtual ~dyn_collectable() {} void* operator new( size_t size ) { dyn_collectable* o = (dyn_collectable*)::operator new(size); alloc->collect(o); return (void*)o; } void operator delete( void* _o ) { if(alloc->dieing) ::operator delete(_o); } static void collector( collect_alloc* ); static collect_alloc* collector(); }; #endif