8 #ifdef CHECK_MEMORY_LEAKS
61 #ifndef HAVE_PLACEMENT_DELETE
62 #define HAVE_PLACEMENT_DELETE 1
89 #ifndef _DEBUG_NEW_REDEFINE_NEW
90 #define _DEBUG_NEW_REDEFINE_NEW 1
95 int check_mem_corruption();
96 void*
operator new(
size_t size,
const char* file,
int line);
97 void*
operator new[](
size_t size,
const char* file,
int line);
98 #if HAVE_PLACEMENT_DELETE
99 void operator delete(
void* pointer,
const char* file,
int line)
throw();
100 void operator delete[](
void* pointer,
const char* file,
int line)
throw();
102 #if defined(_MSC_VER) && _MSC_VER < 1300
105 void*
operator new[](size_t)
throw(std::bad_alloc);
106 void operator delete[](
void*)
throw();
110 extern bool new_autocheck_flag;
111 extern bool new_verbose_flag;
112 extern FILE* new_output_fp;
113 extern const char* new_progname;
123 #define DEBUG_NEW __debug_new_recorder(__FILE__, __LINE__) ->* new
125 # if _DEBUG_NEW_REDEFINE_NEW
126 # define new DEBUG_NEW
128 # ifdef _DEBUG_NEW_EMULATE_MALLOC
131 # define malloc(s) ((void*)(new char[s]))
133 # define malloc(s) ((void*)(DEBUG_NEW char[s]))
135 # define free(p) delete[] (char*)(p)
143 class __debug_new_recorder
147 void _M_process(
void* pointer);
153 __debug_new_recorder(
const char* file,
int line)
154 : _M_file(file), _M_line(line) {}
161 template <
class _Tp> _Tp* operator->*(_Tp* pointer)
162 { _M_process(pointer);
return pointer; }
164 __debug_new_recorder(
const __debug_new_recorder&);
165 __debug_new_recorder& operator=(
const __debug_new_recorder&);
174 class __debug_new_counter
178 __debug_new_counter();
179 ~__debug_new_counter();
182 static __debug_new_counter __debug_new_count;
184 #endif // _DEBUG_NEW_H