1

今天,我找到了一个关于内存泄漏检测的源代码,在他的头文件中,我找到了以下宏定义,有人能告诉我这是什么意思吗?谢谢!

#ifndef MC_NO_REDEFINITION
    #define new MC_NEW
    #define MC_NEW new(__FILE__,__FUNCTION__,__LINE__)
        #define mc_new new
else
//use defined function name instead of keyword new & delete
    #define debug_new new(__FILE__,__FUNCTION__,__LINE__)
#endif  

这意味着,new 表示new(__FILE__,__FUNCTION__,__LINE__),如果这是真的,当我在代码中使用 new 时,编译器如何知道我真正想要调用的内容?

4

2 回答 2

5

提供这些宏的相同代码还必须提供适当的全局定义,该定义operator new()采用适当的附加参数,例如:

void * operator new(std::size_t n, char const * file, char const * func, char const * line)
{
    // log file, func, line

    return operator new(n);
}

也应该有一个匹配的operator delete()

请注意,这new是一个关键字,我认为用宏替换关键字实际上是不被标准所宽恕的。

于 2012-09-09T14:00:36.777 回答
2

注意 new 是一个关键字,我认为用宏替换关键字实际上是不被标准宽恕的。

绝对正确。它会导致未定义的行为。这是不应模仿的 Microsoft hack。

于 2012-09-09T16:30:37.467 回答