1 /******************************************************************************
2 * Copyright (c) 2000-2016 Ericsson Telecom AB
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
12 ******************************************************************************/
16 #ifndef _Common_memory_H
24 class debug_new_counter_t
27 static const char * progname;
29 debug_new_counter_t();
30 ~debug_new_counter_t();
31 void set_program_name(const char *pgn);
33 // implementation in new.cc
35 // An instance for every translation unit. Because each instance is constructed
36 // before main() and probably before any other global object,
37 // it is destroyed after main() ends and all global objects are destroyed.
38 // The last destructor runs check_mem_leak().
39 static debug_new_counter_t debug_new_counter;
41 // Custom placement new for memory tracking
42 void* operator new(size_t size, const char* file, int line);
43 void* operator new[](size_t size, const char* file, int line);
45 // TODO: these might be GCC version dependant
46 void* operator new(size_t size, const std::nothrow_t&, const char* file, int line);
47 void* operator new[](size_t size, const std::nothrow_t&, const char* file, int line);
49 inline void* operator new(size_t, void* __p, const char*, int) { return __p; }
50 inline void* operator new[](size_t, void* __p, const char*, int) { return __p; }
52 // Redirect "normal" new to memory-tracking placement new.
53 #define new(...) new(__VA_ARGS__, __FILE__, __LINE__)
55 #endif // MEMORY_DEBUG