以下代码常常在一个类文件的开头出现,是什么意思呢?

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

先看MSDN里的解释:

Remarks

Assists in finding memory leaks. You can use DEBUG_NEW everywhere in your program that you would ordinarily use the new operator to allocate heap storage.

In debug mode (when the _DEBUG symbol is defined), DEBUG_NEW keeps track of the filename and line number for each object that it allocates. Then, when you use the CMemoryState::DumpAllObjectsSince member function, each object allocated with DEBUG_NEW is shown with the filename and line number where it was allocated.

To use DEBUG_NEW, insert the following directive into your source files:

#define new DEBUG_NEW

Once you insert this directive, the preprocessor will insert DEBUG_NEW wherever you use new, and MFC does the rest. When you compile a release version of your program, DEBUG_NEW resolves to a simple new operation, and the filename and line number information is not generated.

这样就很清楚了,当在debug模式下时,我们分配内存时的new被替换成DEBUG_NEW,而这个DEBUG_NEW不仅要传入内存块的大小,还要传入源文件名和行号,这就有个好处,即当发生内存泄漏时,我们可以在调试模式下定位到该问题代码处。若删掉该句,就不能进行定位了。而在release版本下的new就是简单的new,并不会传入文件名和行号。
    如果定义了_DEBUG,表示在调试状态下编译,因此相应修改了两个符号的定义THIS_FILE是一个char数组全局变量,字符串值为当前文件的全路径,这样在Debug版本中当程序出错时出错处理代码可用这个变量告诉你是哪个文件中的代码有问题。

转载于:https://www.cnblogs.com/imapla/archive/2012/09/03/2668859.html

VC里的#define new DEBUG_NEW相关推荐

  1. #ifdef _DEBUG #define new DEBUG_NEW #endif的解释

    在用vc时,利用AppWizard会产生如下代码: [cpp] view plain copy print? #ifdef _DEBUG #define new DEBUG_NEW #undef TH ...

  2. VC里的project panel窗口如何实现(转载)

    VC里的project panel窗口如何实现   #include "stdafx.h" #include "palette.h"     class CPa ...

  3. VC里使用皮肤美化工具:SkinM…

    原文地址:VC里使用皮肤美化工具:SkinMagic作者:FunRole 在对话框程序里使用skinmagic皮肤控件   1     先把skinmagiclib.h文件拷贝入工程目录,     在 ...

  4. vc 编译c语言时出错,在vc++里输入c语言空函数,为什么编译没错,连接出错?

    在vc++里输入c语言空函数,为什么编译没错,连接出错? 來源:互聯網  2010-02-14 09:24:33  評論 分類: 電腦/網絡 >> 程序設計 >> 其他編程語言 ...

  5. 图解在VC里使用graphics.h绘图(类似TC)

    1 www.easyx.cn 下载 EasyX 库 我下的2014;解压后如下图: 2 根据自己的VC 版本进行安装 3 在控制台画一个圆 #include <graphics.h> // ...

  6. VC里面的Error spawning link.exe 或者cl.exe

    这个问题很多情况下是由于路径设置的问题引起的, 点击VC"TOOLS(工具)"->"Option(选择)"->"Directories(目 ...

  7. python里的define怎么用_如何用(?(DEFINE))在Python中编写正则表达式?

    正则表达式模块的方式: 正如注释中所解释的那样,正则表达式模块允许重用已命名的子模式.不幸的是,在Perl或PCRE中没有(?(DEFINE)--)语法. 因此,当您想要定义命名子模式时,使用相同的解 ...

  8. VC里如何打印word,excel,文本文件

    因工作上的原因,搜集了一些这方面的资料.深感搜集到这些资料的不易,因此拿出来和大家分享,希望能帮到大家一点点. 1. Vc打印Excel: 关于VC如何打开一个excel,这方面的资料很多了,一般用的 ...

  9. VC里的集合类、链表类、映射类

    集合类是用来容纳和处理一组对象或标准数据类型变量的C++类.每个集合类对象可以看作一个单独的对象.类成员函数可作用于集合的所有元素.MFC提供两种类型的集合类: 基于模板的集合类.非基于模板的集合类. ...

最新文章

  1. 小米真蓝牙耳机说明书_媲美AirPods?小米真无线蓝牙耳机Air 2开箱
  2. C语言用递归函数求1累加到100求和
  3. 闪亮蔚蓝_在R中构建第一个闪亮的Web应用
  4. Android之版本检测和更新
  5. leetcode之回溯backtracing专题4
  6. java考试填空题_Java常用考试(填空题)
  7. Java面试 - HashMap的底层实现,之后会问ConcurrentHashMap的底层实现
  8. Mybatis MySQL批量更新
  9. Facebook 开源增强版 LASER,可使用90多种语言
  10. 将Unix时间戳字符串转换为可读日期
  11. 2012年7月19日 解一元二次方程
  12. Excel文件解密软件
  13. 大学生mysql实训心得_大学生实训心得与收获
  14. 科学计算方面的计算机应用,计算机在科学计算方面的应用
  15. nginx+php-fpm docker镜像合二为一
  16. 电脑使用技巧提升篇4:两步实现电脑软件开机自启
  17. 服装店管理软件排名,让你选对是关键
  18. 【Scratch-侦测模块】Scratch-碰到
  19. 递归算法:爬楼梯问题
  20. 实验三 面向对象分析与设计

热门文章

  1. 剑网三缘起的云端游戏,千呼万唤终于出来,有玩家不知道怎么玩?
  2. 2022年3月23日15:51:00——百度2班留存
  3. pmp每日三题(2022年3月4日)
  4. PHP的输入与输出(input与$_GET[“key“])
  5. 零基础学Python(第十七章 模块import)
  6. 25道Spring框架面试题
  7. 在linux学习中遇到的问题
  8. 使用CEfSharp之旅(8)CEFSharp 使用代理 更换位置IP
  9. Mozilla Prism v0.9 For Windows/Linux/Mac
  10. ASP.NET2.0数据库入门之SQL Server