MFC给你生成的cpp文件里面都有这么几行:
1 #ifdef _DEBUG
2 #define new DEBUG_NEW
3 #undef THIS_FILE
4 static char THIS_FILE[] = __FILE__;
5 #endif
在Visual studio 中通常只用1~3行。
对于这段代码的作用,通常有一下解释:
这个是为了VC检测内存泄露而定义的, 只在 Debug 版本中;
- 曾经一个解释说,多次使用__FILE__宏,虽然得到字符串的内容相同,但是可能地址不同,即同一个字符串常量多次用到时占用不同的地址,这样导致需要的内存增加了。为了检测内在泄露, Debug 版本的 new 附加上了调用 new 的文件名与调用所在的行号信息, 这是通过 __FILE__ 和 __LINE__ 来实现的, 这两个属于预定义的内部宏, 而之所以要用 THIS_FILE 来代替 __FILE__, 是为了减少程序大小: 如果你在一个文件中有 10000 次对 new 的调用, 那么会生成 10000 个当前文件名的常量字符串(第一个都是由 __FILE__ 宏扩展而来的), 最后生成的目标文件会很大, 而用 THIS_FILE 来代替, 当前文件名只有一份, 传递文件名使用 THIS_
#undef THIS_FILE的问题
最新推荐文章于 2023-05-23 23:28:38 发布