new的实际形式[1]

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 apemancsdn 的 blog

如果让我们重载一个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的定义:

本文关键:new的实际形式
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top