今天,我找到了一个关于内存泄漏检测的源代码,在他的头文件中,我找到了以下宏定义,有人能告诉我这意味着什么吗?谢谢!
#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时如何知道我真正想要调用的内容?
答案 0 :(得分:4)
提供这些宏的相同代码还必须提供全局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
是一个关键字,我认为用宏替换关键字实际上并不是标准所宽容的。
答案 1 :(得分:2)
请注意,new是关键字,我认为替换关键字 用宏实际上并没有被标准宽恕。
绝对正确。它导致未定义的行为。这是一个不应该被模仿的微软黑客。