Вместо того, чтобы определять 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 для класса, вы можете это сделать, но вам придется переопределить перегрузку в классе, чтобы она соответствовала вашей новой.
person
dma
schedule
14.07.2009