而是定義新的是不同的東西,爲什麼不超載運營商新的?
在全局命名空間的地方添加這些功能定義:
// 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__)
如果您直接在課程上調用「新建」,則您的課程級重載將按預期工作。如果你想在課堂上給MY_NEW打電話,你可以,但是你必須重新定義班級中的超載以適應你的新課程。
來源
2009-07-14 23:01:06
dma
這就是宏的問題:( – GManNickG 2009-07-14 22:38:31
如果你不使用windows,我會建議valgrind。 – LiraNuna 2009-07-14 22:40:37
如果我使用的是Windows,我會使用DUMA。 – EFraim 2009-07-14 22:42:43