码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • malloc 和 new的区别


    在 C++ 中,malloc 和 new 都是用于动态分配内存的方法,但它们有一些重要的区别。以下是关于 malloc 和 new 的常见面试内容及答案的总结:

    1. 区别:

    • malloc 是 C 语言的函数,而 new 是 C++ 中的运算符。
    • malloc 只分配内存空间,而 new 不仅分配内存,还调用对象的构造函数进行初始化。
    • malloc 返回的是 void*,需要进行显式的类型转换,而 new 返回的是具体类型的指针。

    2. 内存分配:

    • malloc:
      int *arr = (int*)malloc(5 * sizeof(int));

    • new:
      int *arr = new int[5];

    3. 释放内存:

    • free 用于释放 malloc 分配的内存:

      free(arr);

    • delete 用于释放 new 分配的内存:

      delete[] arr;

    4. 错误处理:

    • malloc 分配失败时返回 NULL,需要进行检查。
    • new 分配失败时会抛出 std::bad_alloc 异常,可以使用 try-catch 捕获。

    5. 构造和析构函数调用:

    • malloc 不调用对象的构造函数,需要手动调用。
    • new 不仅分配内存,还调用对象的构造函数进行初始化。

    6. 适用性:

    • malloc 在 C 和 C++ 中都可以使用。
    • new 是 C++ 中的运算符,不适用于纯 C 代码。
    问题 8:malloc 和 new 可以混合使用吗?

    答案: 不推荐混合使用。malloc 和 new 使用不同的内存管理方式,混合使用可能导致问题,例如不正确的释放或者构造函数未调用。最好在项目中保持一致性,如果你在某处使用了 new,则最好在其他地方也使用 new。

    问题 9:在 C++ 中,为什么我们要使用 new 和 delete 而不是 malloc 和 free?

    答案:

    • new 和 delete 提供了类型安全性,能够自动调用构造函数和析构函数。
    • new 和 delete 可以直接使用自定义类型,而不需要进行显式的类型转换。
    • 在 C++ 中,推荐使用 new 和 delete,因为它们更符合 C++ 的面向对象的特性。

  • 相关阅读:
    穿山甲SDK接入收益·android广告接入·app变现·广告千展收益·eCPM收益(2023.11)
    kmemleak内存泄漏检测源码分析-1
    模型评估与选择
    电脑重装系统后桌面图标如何调小尺寸
    基础DQL(数据查询)—— 内连接&外连接
    hdoj 3549 Flow Problem(最大网络流)
    Linux目录权限修改-2
    spring cloud 快速上手系列 -> 03-消息队列 Stream -> 035-发送消息
    endnotes插入文献突然变得格式不对,而且也不是按照正常的顺序来插入解决办法
    OpenTCS客户端开发之Web客户端(一)
  • 原文地址:https://blog.csdn.net/m0_38086244/article/details/134518168
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号