通过了解发现,原来在new的内部实现中只涉及内存的分配,也就是只考虑malloc的使用,而关于调用构造函数的部分则是交由编译器处理,所以这里看不到调用构造函数的代码。
由malloc分配内存空间,然后判断是否分配,并发出bad_alloc的异常消息.
/*如果分配成功,返回指向内存的指针,否则。返回NULL,并抛出bad_alloc异常*/
void *operator new(int size) throw(std::bad_alloc)
{
if(size ==0)
size = 1;
while(true){
尝试分配size个字节的内存; //使用malloc
if(分配成功)
返回一个指向该内存的指针;
使用set_new_handler函数处理分配调用异常处理函数;
throw std::bad_alloc();
}
}
delete实现:
/**/
void operator delete(void *memory) throw()
{
if(memory == NULL) return;
归还系统分配的内存空间; //使用free
}