小编dan*_*n.p的帖子

绕过 C++ 中运算符 new 的重写

有没有办法实现绕过覆盖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)

c++ operator-overloading new-operator visual-c++-2012

6
推荐指数
1
解决办法
1808
查看次数