如果让我们重载一个new操作符号,那么正统的重载方式为:
void * operator new(unsigned int usize) (1)
{
return malloc(usize);
}
也许你已经发现了,有的时候,new的形式远比这个复杂,比如mfc(在debug版)下的new就是这么个模样:
void * operator new(unsigned int usize, const char * szfilename, int nline) (2)
{
…
}
当然,它这样的定义,丝毫不会你使用这样的方式使用new:
int * p = new int[4];
那么,我使用这样的形式,它是怎么调用到(2)的呢?
聪明的你或许已经发现了,在你的文件中发现了这么一串宏:
#ifdef _debug
#define new debug_new
#undef this_file
static char this_file[] = __file__;
#endif
hoho,看到没?你的new被替换成了debug_new了。(奇怪么?怎么连关键字都能被define成别的东东呢?别奇怪,你甚至可以#define while for,看看你的程序会怎么样?如果这么干,然后给别人看看,试试效果:)
继续跟踪,看看debug_new的定义: