の代わりに別の何かであることが新たに定義し、なぜオペレータは、新たな過負荷になりませんか?
どこかにグローバル名前空間でこれらの関数定義を追加します。
// 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を呼びたい場合は、新しいクラスに合わせてクラスのオーバーロードを再定義する必要があります。プリプロセッサレベルで#define
経由new
を再定義
出典
2009-07-14 23:01:06
dma
これはマクロの問題です:( – GManNickG
ウィンドウを使用していない場合は、valgrindをお勧めします。 – LiraNuna
Windowsを使用している場合はDUMAを使用します。 – EFraim