ITPub博客

首页 > 应用开发 > IT综合 > C++new的工作方式

C++new的工作方式

IT综合 作者:dongyu2013 时间:2014-05-19 16:58:10 0 删除 编辑

如果申请的是普通的内置类型的空间
1、如果是申请的是0byte,强制转换为1byte
2、使用名为operator new 的标准库函数,如果是数组则调用名为operator new[]的标准库函数,申请相对应的空间,如果没有足够的空间或其他问题且没有定义_new_hanlder,那么会抛出bad_alloc的异常并结束程序
3、如果定义了_new_hanlder回调函数,那么会一直不停的调用这个函数直到问题被解决为止。
4、内存申请成功,返回申请到的内存的首地址。

如果申请的是类的空间
1、如果是申请的是0byte,强制转换为1byte
2、使用名为operator new的标准库函数,如果是数组则调用名为operator new[]的标准库函数,申请相对应的空间,如果没有足够的空间或其他问题且没有定义_new_hanlder,那么会抛出bad_alloc的异常并结束程序
3、如果定义了_new_hanlder回调函数,那么会一直不停的调用这个函数直到问题被解决为止。
4、如果这个类没有定义任何构造函数,析构函数,且编译器没有合成,那么下面的步骤跟申请普通的内置类型是一样的。
5、如果有构造函数或者析构函数,那么会调用一个库函数,具体什么库函数依编译器不同而不同,这个库函数会回调类的构造函数。
6、如果在构造函数中发生异常,那么会释放刚刚申请的空间并返回异常
7、返回申请到的内存的首地址

注意上面的operator new标准库函数跟new表达式的区别!!!!!!
我们可以通过set_new_hanlder去设置_new_hanlder,具体做法如下:
void hanldermemory(){;}
set_new_hanlder(hanldermemory);这只回调函数为hanldermemory
或者set_new_hanlder(NULL);这里没有设置回调函数

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29012686/viewspace-1164448/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-12-25

  • 博文量
    263
  • 访问量
    209145