#include <new> #define DECLARE_MEMORY_POOL(Cls) \ public: \ static void* operator new(size_t _size) \ { \ assert(_size == sizeof(Cls)); \ void* _ptr = MemoryPool<sizeof(Cls)>::instance().allocate(); \ if (_ptr) \ return _ptr; \ else \ throw std::bad_alloc(); \ } \ static void operator delete(void* _ptr) \ { \ if (_ptr != NULL) \ MemoryPool<sizeof(Cls)>::instance().deallocate(_ptr); \ } #define DECLARE_MEMORY_POOL__NOTHROW(Cls) \ public: \ static void* operator new(size_t _size) throw() \ { \ assert(_size == sizeof(Cls)); \ return MemoryPool<sizeof(Cls)>::instanceKnown().allocate(); \ } \ static void operator delete(void* _ptr) \ { \ if (_ptr != NULL) \ MemoryPool<sizeof(Cls)>::instanceKnown().deallocate(_ptr); \ } #define PREPARE_MEMORY_POOL(Cls) \ MemoryPool<sizeof(Cls)>::instance()