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