zoukankan      html  css  js  c++  java
  • 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

    }

  • 相关阅读:
    UVa 106
    UVa 111
    UVa 105
    UVa 104
    UVa 103
    UVa 102
    UVa 101
    UVa 100
    就决定是你了!
    阿姆斯特朗回旋加速喷气式阿姆斯特朗炮
  • 原文地址:https://www.cnblogs.com/xuxu8511/p/2417698.html
Copyright © 2011-2022 走看看