看ACE的源码,发现类中的重载new、delete操作符的方法很简洁,现摘抄如下:
首先定义宏:
// ============================================================================
// ACE_ALLOC_HOOK* macros
//
// Macros to declare and define class-specific allocation operators.
// ============================================================================
# if defined (ACE_HAS_ALLOC_HOOKS)
# define ACE_ALLOC_HOOK_DECLARE \
void *operator new (size_t bytes); \
void operator delete (void *ptr);
// Note that these are just place holders for now. Some day they
// may be be replaced by <ACE_Malloc>.
# define ACE_ALLOC_HOOK_DEFINE(CLASS) \
void *CLASS::operator new (size_t bytes) { return ::new char[bytes]; } \
void CLASS::operator delete (void *ptr) { delete [] ((char *) ptr); }
# else
# define ACE_ALLOC_HOOK_DECLARE struct __Ace {} /* Just need a dummy... */
# define ACE_ALLOC_HOOK_DEFINE(CLASS)
# endif /* ACE_HAS_ALLOC_HOOKS */
然后在需要重载new、delete的类的声明中加入
ACE_ALLOC_HOOK_DECLARE
实现中加入:
ACE_ALLOC_HOOK_DEFINE(CLASS)