面试题:C++中malloc/free和new/delete的差别

马谦马谦马谦 2018年4月7日21:22:43 发表评论
文章最后编辑于:2018-5-4 22:48:08

malloc/free是c语言中分配内存空间的函数,malloc创建空间,free释放空间。

new/delete是c++中分配内存的操作符,new创建空间,delete删除空间。

主要的区别为:

  • malloc和free是库函数,使用需要添加stdlib.h头文件。而new和delete则是c++中的操作符。
  • malloc只是简单的分配内存空间,而new分配空间后会自动调用对象的析构函数。相对应的,free也只是简单的删除内存空间,delete则会调用对应析构函数。

一、构造函数和析构函数的调用

定义一个简单的类:

使用malloc/freenew/delete分别创建和释放对象

输出:

可见,malloc确实没有调用构造函数,free也没有调用析构函数。

二、delete和delete[]

deletenew对应,delete[]new[]对应。delete用来删除单个对象,delete[]删除对象数组。

deletedelete[]的区别在于后者会调用数组内每一个元素的析构函数,而delete只会调用一个。

两者在对于内置元素类型时功能一致,对于复杂类型delete可能会报错。

以上代码运行会报错:

原因是使用了delete来删除new[]创建的复杂类型的对象,此时只能用delete[]

本文共执行41次查询,耗时0.295秒!
马谦马谦马谦

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: