C++:new与delete简单使用

一、malloc与free回顾

C语言中的malloc与free:malloc与free称做C的库函数。
malloc与free开辟内存:

int *p = (int*)malloc(sizeof(int));
if (p == nullptr)
{
	return -1;
}
*p = 20;
free(p);

malloc: 内存开辟失败是用返回值与空指针进行判断的,malloc是按照字节开辟内存的,返回值为void * ,需要对其强转。只管开辟内存,不管初始化,我们需要单独对其初始化。
free: 进行释放内存。

malloc与free开辟数组内存:

int *q = (int*)malloc(sizeof(int)*20);
if (q == nullptr)
{
	return -1;
}
free(q);

二、new与delete简单使用

C++中的new与delete:new与delete称作运算符。
注意点:
1.new不仅可以开辟内存,还可以进行内存初始化。
2.malloc开辟内存失败,是通过返回值和nulptr做比较,而new开辟内存失败,是通过抛出bad_alloc类型的异常来判断的。
new与delete开辟内存:

int *p1 = new int(20);
delete p1;

new: 在堆上指定开辟一个整型类型,并用小括号进行初始化,因此不再需要类型转换。通过抛出bad_alloc类型的异常来判断开辟内存失败。
delete: 释放内存。

new与delete开辟数组内存:

int *q1 = new int[20]();//开辟20个整型,每一个初始化为0
delete[]q1;

三、new与delete、delete与free对比

new和maloc区别:
1.malloc与free本身为C的库函数;new与delete在C++中为运算符。
2.malloc开辟内存若失败,通过空指针来比较,并且malloc只负责开辟内存,不负责初始化;new不仅可以开辟内存,还可以进行初始化。
3.new在开辟时指定类型,不需要进行强转;而malloc只是开辟内存,不管内存中放什么数据,返回的市void * 需要对返回值强转。

delete和free区别:
1.free不管释放单个元素内存还是数组内存,只需要传入内存的起始地址即可;
delete释放单个元素内存,不需要加中括号,但释放数据内存时需要加中括号。

new有多少种?
情况1:最常用操作,抛异常处理内存开辟失败

int *p1 = new int(20);//最常用操作,通过抛出异常判断内存开辟失败

情况2:不抛出异常

int *p2 = new (nothrow) int;//不抛出异常,开辟失败判断情况与malloc一样

情况3:堆上开辟常量

const int *p3 = new const int(40);//在堆上开辟了一个常量

情况4:定位new

//定位new
int data = 0;
int *p4 = new (&data) int(50);//在指定的内存上划分了一块初值为4字节大小的内存,初值为50
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值