我看到了跟随宏,
#ifdef _DEBUG
#define new DEBUG_NEW
#UNDEF THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
Run Code Online (Sandbox Code Playgroud)
上面宏的用法是什么?
谢谢
DEBUG_NEW只是一个MACRO,通常定义为:
#define DEBUG_NEW new(__FILE__, __LINE__)
#define new DEBUG_NEW
Run Code Online (Sandbox Code Playgroud)
因此,无论您在何处使用new,它还可以跟踪文件和行号,这些文件和行号可用于查找程序中的内存泄漏.
并且__FILE__,__LINE__是预定义的宏,分别评估您使用它们的文件名和行号!
阅读以下文章,该文章解释了将DEBUG_NEW与其他有趣的宏一起使用的技巧,非常精美:
来自Wikpedia,
Debug_new指的是C++中的一种技术,用于重载和/或重新定义operator new和operator delete,以拦截内存分配和释放调用,从而调试程序以便内存使用.它通常涉及定义名为DEBUG_NEW的宏,并使new变为new(_ FILE _,_ LINE _)以记录分配时的文件/行信息.Microsoft Visual C++在其Microsoft基础类中使用此技术.有一些方法可以扩展此方法以避免使用宏重定义,同时仍然能够在某些平台上显示文件/行信息.这种方法有许多固有的局限性.它仅适用于C++,并且不能捕获像malloc这样的C函数的内存泄漏.但是,与一些更完整的内存调试器解决方案相比,它使用起来非常简单,速度也非常快.
_DEBUG是一个任意命名但经常选择的命令行符号,表示应该编译额外的代码和对程序调试的支持。这通常会导致额外的检查以帮助隔离编程缺陷,或者导致输出额外的消息以利于开发商。
DEBUG_NEW尚不清楚,但它可能是一个别名,它会进行与和new()相关的额外验证。new()delete()
__FILE__是一个内置的预处理器符号,其计算结果为正在编译的模块的文件名。例如“MyProgram.cc”。
| 归档时间: |
|
| 查看次数: |
7631 次 |
| 最近记录: |