new、delete用法(一)

第一部分:
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__ 是专用的预处理符号,它保存当前被编译的模块文件名称和行数。 其主要用途是当你的应用程序泄漏时.











































原文地址:https://www.cnblogs.com/yuanxingdefan/p/3223922.html