Вместо того, чтобы определять new как нечто иное, почему бы не перегрузить оператор new?
Добавьте эти определения функций где-нибудь в глобальном пространстве имен:
// 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();
Затем вы можете определить свой собственный новый макрос, который обращается к неглобальным версиям, и реализовывать глобальные версии, чтобы утверждать или предупреждать, если они вызваны (чтобы поймать что-нибудь проскальзывание).
#define MY_NEW(s) new(s, __FILE__, __LINE__)
Ваши перегрузки на уровне класса будут работать, как и ожидалось, если вы вызовете 'new' прямо в классе. Если вы хотите вызвать MY_NEW для класса, вы можете, но вам придется переопределить перегрузку в классе, чтобы она соответствовала вашему новому.