远行的帆

没有谁能阻挡我前行的步伐,风雨兼程,我也将义无反顾。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
第一部分:
new的使用:
#define DEBUG_NEW new(THIS_FILE, __LINE__)解释

THIS_FILE:表示当前类所处的文件名;
__LINE__:表示分配内存操作所在的行数。
所以这个new多了两个参数,这是为了调试方便编译器预定义的两个参数。再加上new本身隐含了一个参数(new的对象的大小)所以是三个参数。

普通情况下,调用new,如 int* p = new int; 将产生两个操作:
1.计算int的大小,sizeof(int);
2.调用
  void* operator new(size_t nAlloc){
 return malloc(nAlloc);
}分配内存。
要使用new(THIS_FILE,__LINE__)宏,需要调用vc自己定义的new函数版本
  void* operator new(size_t nSize, LPCSTR lpszFileName, int nLine);
所以:

class CA;
CA*p = new CA();
预处理程序便会将它转变为:
 
  p= new (sizeof(CA), THIS_FILE, __LINE__) CFoo(); 

  __FILE__(用来初始化 THIS_FILE)和 __LINE__ 是专用的预处理符号,它保存当前被编译的模块文件名称和行数。 其主要用途是当你的应用程序泄漏时.











































posted on 2013-07-29 20:54  远行的帆  阅读(305)  评论(0编辑  收藏  举报