diff options
Diffstat (limited to 'Build/source/libs/xpdf/xpdf-src/goo/gmempp.h')
-rw-r--r-- | Build/source/libs/xpdf/xpdf-src/goo/gmempp.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/Build/source/libs/xpdf/xpdf-src/goo/gmempp.h b/Build/source/libs/xpdf/xpdf-src/goo/gmempp.h new file mode 100644 index 00000000000..27f7fe786c5 --- /dev/null +++ b/Build/source/libs/xpdf/xpdf-src/goo/gmempp.h @@ -0,0 +1,48 @@ +//======================================================================== +// +// gmempp.h +// +// Redefine the new and delete operators to call the debugging malloc. +// +// This is a hack: some libraries (Qt) allocate global objects and +// never free them, so this file #define's new to have an argument, so +// that we can differentiate our new calls from external library new +// calls. Calls from external libraries will not be counted when +// un-freed memory is listed. There's no guarantee that this will +// work in all cases: if some external library also defines a new +// operator that takes the same extra argument, things will break +// horribly. +// +// This entire .h file is wrapped in '#ifdef DEBUG_MEM'. I.e., if you +// don't define DEBUG_MEM, this hack goes away and can't cause any +// problems. Do not define DEBUG_MEM in production code. +// +// To use this .h file, it must be #included *after* all system +// includes. Calls to new in any modules that do not include this .h +// file will not be counted as un-freed memory. +// +//======================================================================== + +#ifndef GMEMPP_H +#define GMEMPP_H + +#ifdef DEBUG_MEM + +#include <stdlib.h> + +extern void *operator new(size_t size, int dummy); +extern void *operator new[](size_t size, int dummy); + +// These have to be defined (and declared) to avoid a compiler warning +// with Visual Studio. +extern void operator delete(void *p, int dummy); +extern void operator delete[](void *p, int dummy); + +// This transforms 'new Foo(...)' into 'new (1) Foo(...)', which +// forces a call to the operator new variant with the 'int dummy' arg. +#define debug_new new (1) +#define new debug_new + +#endif // DEBUG_MEM + +#endif // GMEMPP_H |