#undef THIS_FILE的问题

本文探讨了MFC源文件中关于#undef THIS_FILE的用途,主要涉及内存泄漏检测和编译优化。DEBUG_NEW在Debug版本中记录内存分配的文件名和行号,而在Release版本中不包含这些信息,以此平衡性能和调试需求。THIS_FILE宏用于存储当前文件名,减少内存占用。同时,文章提到在某些情况下,直接使用#define DEBUG_NEW new(__FILE__, __LINE__)的疑问,期待更多讨论。" 91662225,8235135,Go语言map与range使用技巧,"['golang', 'map操作', '遍历']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 版本中;

  1.         曾经一个解释说,多次使用__FILE__宏,虽然得到字符串的内容相同,但是可能地址不同,即同一个字符串常量多次用到时占用不同的地址,这样导致需要的内存增加了。为了检测内在泄露, Debug 版本的 new 附加上了调用 new 的文件名与调用所在的行号信息, 这是通过 __FILE__ 和 __LINE__ 来实现的, 这两个属于预定义的内部宏, 而之所以要用 THIS_FILE 来代替 __FILE__, 是为了减少程序大小: 如果
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值