我看到后续宏,DEBUG_NEW和__FILE__的用法是什么?
#ifdef _DEBUG
#define new DEBUG_NEW
#UNDEF THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
什么是上面的宏的使用情况如何?
谢谢
我看到后续宏,DEBUG_NEW和__FILE__的用法是什么?
#ifdef _DEBUG
#define new DEBUG_NEW
#UNDEF THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
什么是上面的宏的使用情况如何?
谢谢
_DEBUG
是任意命名,但往往选择,命令行符号指明了调试应在编译的程序,额外的代码和支持。这通常会导致额外的检查,以帮助隔离编程缺陷,或者导致为了开发者的利益而输出额外的消息。
DEBUG_NEW
尚不清楚,但它可能是new()
的别名,它与new()
和delete()
进行了额外验证。
__FILE__
是一个内置的预处理器符号,它的计算结果为正在编译的模块的文件名。例如“MyProgram.cc”。
DEBUG_NEW仅仅是通常被定义为一个宏:
#define DEBUG_NEW new(__FILE__, __LINE__)
#define new DEBUG_NEW
所以您随时随地使用new
,还可以跟踪哪些可以用来定位内存泄漏的文件和行号的你程序。
和__FILE__
,__LINE__
是predefined macros,它们分别评估您使用它们的文件名和行号!
阅读下面的文章,其说明使用DEBUG_NEW与其他有趣的宏,很漂亮的技术:
A Cross-Platform Memory Leak Detector
从Wikpedia,
DEBUG_NEW是指技术, C++ 过载和/或重新定义运算符 新的和运算符删除的顺序到 拦截内存分配和 解除分配调用,从而调试内存使用的 程序。 经常 涉及定义一个名为 DEBUG_NEW宏,使新成为 像新(_ FILE _,_ LINE _) 记录上 配置文件/行信息。 Microsoft Visual C++在其Microsoft“ 基础类”中使用 此技术。有一些 方法来扩展此方法,以避免 使用宏重定义,而仍然 能够显示某些平台上的文件/行 信息。这种 方法有许多固有的限制。它仅适用于C++,并且 无法捕获像malloc这样的函数的内存泄漏。但是,它可以使用起来非常简单,并且与更多的 完整的内存调试器解决方案相比,速度更快。
如果你没有实际使用它,我会建议你删除的代码,因为它与运营商新的其他ligitimate重载comflicts。
参见这里的讨论:
Is there a way to automatically have a #define reproduced in each source file
通常,makroses和预处理器命令的这种组合,在MFC projets使用,以跟踪存储器泄漏。它必须包含在你的源文件中,并且它的含义如下:
#ifdef _DEBUG
和#endif
之间的所有内容只在编译器的DEBUG模式下执行。
字符串:#define new DEBUG_NEW
,表示只要您在代码中使用新的操作符,它将被替换为宏DEBUG_NEW
。然后,当您执行对象转储时,DEBUG_NEW
将允许您查明内存泄漏的来源。
字符串:#UNDEF THIS_FILE
和static char THIS_FILE[] = __FILE__;
- 重新定义THIS_FILE
的含义并记住当前的文件名和行号。