170-C++基础

170-C++基础,第1张

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/874673.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存