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:
释放数组内存:
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)