new delete的内部实现代码

通过了解发现,原来在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

}

posted on 2012-03-26 12:16  笔记吧... 可能只有自己看得懂  阅读(1014)  评论(0编辑  收藏  举报