new/delete和malloc/free的区别

在C/C++面试中,两种区别是经常被问到的,第一个是指针和引用的区别;第二个就是我们文章题目所提到的-new/delete和malloc/free的区别。

想要回答出来这类问题,首先要清楚他们的使用,下面我们以new/malloc如何使用为例,来更好的理解这类问题。

看下面两句代码:

int *pa = (int*)malloc(sizeof(int));
int *a = new int();

可以得出new和malloc两个区别:

1.使用malloc申请空间的时候,需要传递参数来标明申请空间的大小;而使用new来申请时,new会根据后面的类型来开辟相应的空间,不需要传递参数。

2.malloc申请空间之后返回的是一个void ,使用其他类型接收的时候需要进行类型转换;而new得到的就是一个相应类型的指针,不需要类型转换。

下面是关于自定义类型的相关代码:

class A
{
public:
    A(int a) :_a(a)
    {}
private:
	int _a;
};
int main()
{
    A* a1 = (A*)malloc(sizeof(A));
    A* a2 = new A(10);
    return 0;
}

通过visual studio调试窗口可以看一下,a1和a2的初始化情况:

3.new会调用构造函数完成空间的初始化,而malloc不会对空间进行初始化;同样delete在销毁空间时会调用析构函数完成资源的清理,而free只会对空间进行销毁。

下面两点很容易就能理解,这里就不使用代码举例了:

4.new/delete是操作符,malloc/free是函数。

5.malloc失败时,会返回nullptr,需要对malloc的返回值进行判空检查;new失败时会抛异常,不需要进行判空检查。

本文由mdnice多平台发布

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

new出新对象

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

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

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

打赏作者

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

抵扣说明:

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

余额充值