<六>理解C++ new delete

莱莱  金牌会员 | 2022-11-2 09:49:14 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 676|帖子 676|积分 2028

new和malloc区别?delete和free区别?
malloc和free是C语言的库函数
new和delete叫做运算符
malloc是否开辟成功是通过返回值和空指针比对判断.和new开辟失败会抛出异常.bad_alloc
new 不仅可以做内存开辟,还可以做内存初始化操作.
点击查看代码
  1. int *p =(int *)malloc(sizeof(int));
  2. // malloc按照字节开辟空间,返回的是void *,需要自己强转到指定类型.
  3. //malloc只负责空间开辟,不负责初始化
  4. if(p==nullptr){
  5.    return -1;
  6. }
  7. *p=20;
  8. //释放malloc申请的空间地址,只需要将p地址传入即可
  9. free(p);
  10. //new 成功与否通过异常捕捉实现
  11. try{
  12.    int *p1=new int(20);
  13.    delete p1;
  14. }catch(const bad_alloc &e){
  15. }
  16. //C语言开辟数组空间
  17. int *arr1=(int *)malloc(sizeof(int) * 20);
  18. if(arr1==nullptr){
  19.    return -1;
  20. }
  21. free(arr1);//C语言无论是释放单个元素还是数组 都是传入地址即可.
  22. //C++ 开辟数组空间
  23. int  *arr2 =new int[20];     //堆上只负责开辟空间不会做初始化
  24. int  *arr3 =new int[20]();  //堆上开辟空间,同时负责初始化为0
  25. int  *arr4=new int[20](40);//堆上开辟空间,并且初始化值40
  26. //注意new 成功还是失败不要通过和nullptr对比方式,而通过捕获异常方式来判断
  27. delete[]arr2;
  28. //注意delete在释放单个元素的时候不需要[] 而在释放数组空间的时候要[]
复制代码
C++中new 的方式有哪几种?
点击查看代码
  1. int *p=new int(20);
  2. int *p2=new (nothrow) int;
  3. cont int *p3=new const int(10);//在堆空间开辟一个常量
  4. //定位new
  5. int data=100;
  6. int *p4=new (&data) int(200);//在指定的位置 开辟空间,放入200值
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莱莱

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表