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

马谦马谦马谦 C/C++评论181字数 668阅读 2 分 13 秒阅读模式

一、几者的区别

  1. malloc/free 是 c 语言中分配内存空间的函数,malloc 创建空间,free 释放空间。
  2. new/delete 是 c++中分配内存的操作符,new 创建空间,delete 删除空间。
  3. new[]/delete[] 也是 C++中的操作符,用来给数组分配和释放空间。
  4. malloc 只是简单的分配内存空间,而 new 分配空间后会自动调用对象的析构函数。相对应的,free 也只是简单的删除内存空间,delete 则会调用对应析构函数。

二、 malloc/free 和 new/delete 对比

定义一个简单的类:

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

运行:

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

三、 delete 和 delete[]

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

deletedelete[]的区别在于后者会调用数组内每一个元素的析构函数,而 delete 只会调用一个。两者在对于内置元素类型时功能一致,对于复杂类型 delete 可能会报错。

执行会报错:

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

对内置类型而言,互相使用并没有问题。但是对自定义类型而言,delete 和 delete[] 并不能乱用。

  最后更新:2019-12-29
马谦马谦马谦
  • 本文由 马谦马谦马谦 发表于 2018 年 4 月 7 日 21:22:43
  • 转载请务必保留本文链接:https://www.dyxmq.cn/program/code/c-cpp/the-different-between-malloc-free-and-new-delete.html
C/C++中struct和class的区别 C/C++

C/C++中 struct 和 class 的区别

一、 class 和 struct 的区别 C++中 class 和 struct 的区别: 继承权限,struct 的默认继承权限为 public,class 的默认继承权限为 private 。 访问权限,struct 的默...
指针和引用的区别 C/C++

指针和引用的区别

区别: 指针是一个变量类型,引用只是一个变量别名。 指针可以不用初始化,引用必须初始化。 指针可以指向空地址,引用不能指向空。 指针初始化后可以修改,引用不能修改。 其他: 引用本质上也是一个指针,内...
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证