有没有办法实现绕过覆盖operator new?
像这样的东西:
void* ::operator new( std::size_t size ) {
void *p = ( ::operator new( size ) ); // But original, _not_ infinite recursion
// do stuff with p
return p;
}
Run Code Online (Sandbox Code Playgroud)
背景:
我有一些遗留代码,我们最近改用 Visual Studio 2012 进行编译。现在,当内存块malloc不足时,我们会随机崩溃。_heap_alloc(是的,代码中到处都是小内存泄漏和其他不良行为。但不幸的是,彻底清理是不现实的,大约有 500 000 SLOC。)
我目前的理论是,原因是几乎所有源文件都包含具有以下覆盖的标头operator new:
void* ::operator new( std::size_t size ) {
void* p = malloc( size );
if( p == NULL )
throw;
// set memory to zero
memset( p, 0, size …Run Code Online (Sandbox Code Playgroud)