Invece di definire nuovi di essere qualcosa di diverso, perché non sovraccaricare operatore nuovo?
aggiungere queste definizioni di funzioni da qualche parte nel namespace globale:
// operator new overloads
void* operator new(const size_t size, const char* file, int line) throw();
void* operator new(const size_t size, const size_t align, const char* file, int line) throw();
void* operator new[](const size_t size, const char* file, int line) throw();
void* operator new[](const size_t size, const size_t align, const char* file, int line) throw();
// can't easily overload operator delete
void operator delete(void* ptr) throw();
void operator delete[](void* ptr) throw();
// matched to the operator new overload above in case of exceptions thrown during allocation
void operator delete(void* ptr, const char* file, int line) throw();
void operator delete[](void* ptr, const char* file, int line) throw();
void operator delete(void* ptr, const size_t align, const char* file, int line) throw();
void operator delete[](void* ptr, const size_t align, const char* file, int line) throw();
// global new/delete
void* operator new(size_t size) throw();
void* operator new(size_t size, const std::nothrow_t&) throw();
void* operator new(size_t size, size_t align) throw();
void* operator new(size_t size, size_t align, const std::nothrow_t&) throw();
void* operator new[](size_t size) throw();
void* operator new[](size_t size, const std::nothrow_t&) throw();
void operator delete(void* ptr, const std::nothrow_t&) throw();
void operator delete[](void* ptr, const std::nothrow_t&) throw();
Quindi è possibile definire il proprio nuova macro che chiama attraverso alle versioni non globali e implementare le versioni globali per far valere o mettere in guardia se' chiamato (per prendere qualsiasi cosa sfugga).
#define MY_NEW(s) new(s, __FILE__, __LINE__)
vostri sovraccarichi a livello di classe funzionerà come previsto se si chiama 'nuova' direttamente sulla classe. Se si desidera chiamare MY_NEW sulla classe, è possibile ma sarà necessario ridefinire il sovraccarico della classe in modo che corrisponda al nuovo.
Questo è il problema con le macro :( – GManNickG
Se non si sta utilizzando Windows, suggerirei valgrind. – LiraNuna
userei DUMA se fossi usando Windows. – EFraim