当前位置: 首页 > news >正文

【C++ 高频面试题】new、delete 与 malloc、free的区别

文章目录

      • 1. new 和 malloc 有什么区别
      • 2. delete 和 free 有什么区别?
      • 3. 堆和栈的区别

1. new 和 malloc 有什么区别

  • 🐧类型安全问题:
    (1)newC++的运算符,可以为对象分配内存并调用相应的构造函数。
    (2)mallocC语言库函数,只分配指定大小的内存块,不调用构造函数。

  • 🐧返回类型:
    (1)new返回的是具体类型的指针,而且不需要进行类型转换。
    (2)malloc返回的是void*需要进行类型转换,因为它不知道所分配内存的用途。

  • 🐧内存分配失败时的行为:
    (1)new在内存分配失败时会抛出std::bad_alloc异常。
    (2)malloc在内存分配失败时返回NULL

  • 🐧内存块大小:
    (1)new可以用于动态分配数组,并知道数组大小。
    (2)malloc只是分配指定大小的内存块,不了解所分配内存块的具体用途。

  • 🐧释放内存的方式:
    (1)delete会调用对象的析构函数,然后释放内存。
    (2)free只是简单的释放内存块,不会调用对象的析构函数。


2. delete 和 free 有什么区别?

  • 🐧类型安全性:
    (1)delete会调用对象的析构函数,确保资源被正确释放;
    (2)free只是简单释放内存块。

  • 🐧内存块释放后的行为:
    (1)delete释放的内存块的指针值会被设置为nullptr,以避免野指针。 野指针指的是指向已被释放的或无效的内存地址的指针
    (2)free不会修改指针的值,可能导致野指针问题。

  • 🐧数组的释放:
    (1)delete可以正确释放通过 new []分配的数组。
    (2)free不了解数组的大小,不适用于释放通过malloc分配的数组。


3. 堆和栈的区别

  • 🐧栈和堆都是用于存储程序数据的内存区域。栈是一种有限的内存区域,用于存储局部变量、函数调用信息等。堆是一种动态分配的内存区域,用于存储程序运行时动态分配的数据。
  • 🍎栈上变量的声明周期与其所在函数的执行周期相同,而堆上变量的生命周期由程序员显示控制,可以使用(mallloc、new)申请,使用(deletefree进行释放)。
  • ⚽ 栈上的内存分配和释放是自动的,速度较快。而堆上的内存分配和释放需要手动操作,速度相对较慢。

http://www.mrgr.cn/news/25888.html

相关文章:

  • 【上行传输流程】
  • 中国科技巨头在AI领域的竞争态势分析
  • 区块链先驱孙宇晨:引领价值传播,激发行业创新活力
  • SpringSecurity原理解析(六):SecurityConfigurer 解析
  • ZoneTree: 高性能ACID兼容的.NET有序键值数据库
  • 【Docker】镜像容器命令全解析
  • Linux(5)--CentOS8使用yum
  • 武汉六西格玛绿带培训多少钱
  • Apple M3编译MAVSDK安卓平台SO库
  • 10.1英寸工业三防平板提升工厂的工作效率
  • AI大模型知识点大梳理_ai大模型知识学习,零基础入门到精通,收藏这一篇就够了
  • 跑DecoupleSegNets遇到的问题
  • 关于python取四舍五入的值错误的原因
  • Zabbix监控k8s云原生环境
  • 【Qt】子控件选择器
  • node-red 资料收集
  • 大龄焦虑?老码农逆袭之路:拥抱大模型时代,焕发职业生涯新活力!
  • JAVA宠物界的Uber同城遛狗兼职系统小程序源码
  • 新教材,新挑战,家长如何助力孩子跨越英语学习的变革期
  • 企业数据质量的“谁做什么”指南