170-C++基础(new和delete基础,placement new定位new)

new和delete

new和malloc的区别是什么?
delete和free的区别是什么?

在这里插入图片描述

  • malloc和free,称作C语言的库函数;
  • malloc只管开辟内存(按字节开辟),不管初始化。

在这里插入图片描述

  • new和delete,称作运算符。
  • new后边直接指定类型,如int,在堆上开辟int类型的内存。
  • new和delete,称作运算符。
  • new后边直接指定类型,如int,在堆上开辟int类型的内存。

malloc开辟内存失败,是通过返回值和nullptr空指针做比较;
而new开辟内存失败,是通过抛出bad_alloc类型的异常来判断的。
把可能发生异常的代码放在try里面:
在这里插入图片描述
在这里插入图片描述

开辟和释放数组的内存

C语言的malloc是这样:在这里插入图片描述

C++的new是这样:

  • new开辟数组内存时是不能在小括号进行初始化的。
  • 这样写,是堆上只负责开辟数组,数组的元素不初始化。

这样写,是开辟的数组的所有元素都初始化为0:
在这里插入图片描述
释放数组内存:
在这里插入图片描述

new的种类

int *p1 = new int(20);

int *p2 = new (nothrow) int;//不抛出异常版本的new,返回值跟空nullptr判断。

const int *p3 = new const int(40);//开辟常量内存

//定位new  
int data = 0;
int *p4 = new (&data) int(50);
//在指定的内存上划分出4字节的内存赋值为50
cout << "data:" << data << endl;//data:50

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liufeng2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值