| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- /**
- * PANDA 3D SOFTWARE
- * Copyright (c) Carnegie Mellon University. All rights reserved.
- *
- * All use of this software is subject to the terms of the revised BSD
- * license. You should have received a copy of this license along
- * with this source code in a file named "LICENSE."
- *
- * @file memoryBase.h
- * @author drose
- * @date 2006-11-16
- */
- #ifndef MEMORYBASE_H
- #define MEMORYBASE_H
- #include "dtoolbase.h"
- #include "memoryHook.h"
- // Place this macro within a class definition to define appropriate operator
- // new and delete methods that hook into the MemoryInfo class to provide
- // memory tracking. Of course, it is better simply to inherit from
- // MemoryBase; this macro is provided to resolve problems with multiple
- // inheritance or some such.
- #define ALLOC_MEMORY_BASE \
- inline void *operator new(size_t size) RETURNS_ALIGNED(MEMORY_HOOK_ALIGNMENT) { \
- return PANDA_MALLOC_SINGLE(size); \
- } \
- inline void *operator new(size_t size, void *ptr) { \
- (void) size; \
- return ptr; \
- } \
- inline void operator delete(void *ptr) { \
- PANDA_FREE_SINGLE(ptr); \
- } \
- inline void operator delete(void *, void *) { \
- } \
- inline void *operator new[](size_t size) RETURNS_ALIGNED(MEMORY_HOOK_ALIGNMENT) { \
- return PANDA_MALLOC_ARRAY(size); \
- } \
- inline void *operator new[](size_t size, void *ptr) { \
- (void) size; \
- return ptr; \
- } \
- inline void operator delete[](void *ptr) { \
- PANDA_FREE_ARRAY(ptr); \
- } \
- inline void operator delete[](void *, void *) { \
- }
- /**
- * This class is intended to be the base class of all objects in Panda that
- * might be allocated and deleted via the new and delete operators. It
- * redefines these operators to provide some memory tracking support.
- *
- * We used to try to override the global operator new and delete methods, but
- * that seems to cause problems when including header files for C++-based
- * system libraries (such as are found on OSX).
- */
- class EXPCL_DTOOL_DTOOLBASE MemoryBase {
- public:
- ALLOC_MEMORY_BASE;
- };
- #endif
|