[C/C++]new/delete 和 malloc/free 的区别?

news2024/12/28 15:48:48

new/delete 和 malloc/free 都是C/C++中用于动态内存管理的机制

但它们之间存在一些关键区别:

1. 语法和使用方式

  • new/delete:

    • new 是一个运算符,用来分配内存并调用对象的构造函数。
    • delete 也是运算符,它会先调用对象的析构函数,然后释放内存。
    • 它们主要用于类的对象,也可以用于基本数据类型。
  • malloc/free:

    • malloc 是一个标准库函数,用来分配指定大小的内存块,返回指向该内存块的指针。
    • free 也是一个标准库函数,用来释放由 malloc(或 callocrealloc)分配的内存。
    • 它们不调用任何构造函数或析构函数,适用于非对象类型的内存分配,也可用于原始数据类型的数组。

2. 构造与析构

  • new/delete 自动处理对象的构造和析构。
  • malloc/free 不处理构造和析构,这意味着你需要手动初始化分配的内存,并且在释放之前没有自动清理操作。

3. 返回类型

  • new 返回的是所创建对象的类型的指针。
  • malloc 总是返回 void*,需要显式地转换为适当的指针类型。

4. 失败时的行为

  • new 在无法分配足够的内存时,默认情况下会抛出 std::bad_alloc 异常。
  • malloc 在失败时返回 NULL,不会抛出异常,需要手动排查空指针问题。

5. 内存对齐

  • new 保证按照对象的要求进行正确的内存对齐。
  • malloc 通常也会正确对齐内存,但这依赖于具体的实现。

6. 使用场景

  • new/delete 更适合于C++代码,因为它们更符合面向对象编程的原则。
  • malloc/free 来自C语言,虽然在C++中也可以使用,但在C++中通常推荐使用 new/delete

7. 数组分配

  • new 可以通过 new[] 分配数组,并通过 delete[] 释放数组。
  • malloc 分配的数组需要通过计算所需的总字节数来确定大小,而 free 不区分是否为数组。

        总的来说,在C++中,new/delete 提供了更加类型安全和面向对象的方式来管理内存,而 malloc/free 则提供了更底层的控制。在现代C++编程中,推荐使用 new/delete 或者更好的智能指针(如 std::unique_ptrstd::shared_ptr),以及容器(如 std::vector)来管理动态内存,以减少内存泄漏和其他潜在的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2266993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IOS safari 播放 mp4 遇到的坎儿

起因 事情的起因是调试 IOS 手机下播放服务器接口返回的 mp4 文件流失败。对于没调试过移动端和 Safari 的我来说着实费了些功夫,网上和AI也没有讲明白。好在最终大概理清楚了,在这里整理出来供有缘人参考。 问题 因为直接用 IOS 手机的浏览器打开页面…

单片机+人体红外感应的防盗系统设计(仿真+源码+PCB文件+报告)

资料下载地址:单片机人体红外感应的防盗系统设计(仿真源码PCB文件报告) 1、功能介绍 (1)该设计包括硬件和软件设计两个部分。 (2)本红外线防盗报警系统由热释电红外传感器、报警器、单片机控制电路、LED控制电路及相关的控制管理软件组成。用户终端完成信息采集、处…

网络攻防实践

1. 学习总结 黛蛇蠕虫案例: 原理:利用系统漏洞,并集成攻击代码。其中,通过蜜罐技术并进行数据分析所获取的攻击场景如下: 外部感染源攻陷蜜罐主机 执行Shellcode后获取主机权限后连接控制命令服务器,获取F…

寒假准备找实习复习java基础-day1

CMD常用命令: java跨平台原理: JRE和JVM Java基本数据类型

MacOS安装Xcode(非App Store)

文章目录 访问官网资源页面 访问官网资源页面 直接访问官网的历史版本下载资源页面地址:https://developer.apple.com/download/more/完成APP ID的登陆,直接找到需要的软件下载即可 解压后,安装将xcode.app移动到应用程序文件夹。

Docker 安装mysql ,redis,nacos

一、Mysql 一、Docker安装Mysql 1、启动Docker 启动:sudo systemctl start dockerservice docker start 停止:systemctl stop docker 重启:systemctl restart docker 2、查询mysql docker search mysql 3、安装mysql 3.1.默认拉取最新版…

gitlab克隆仓库报错fatal: unable to access ‘仓库地址xxxxxxxx‘

首次克隆仓库,失效了,上网查方法,都说是网络代理的问题,各种清理网络代理后都无效,去问同事: 先前都是直接复制的网页url当做远端url,或者点击按钮‘使用http克隆’ 这次对于我来说有效的远端u…

RK356x bsp 7 - PCF8563 RTC调试记录

文章目录 1、环境介绍2、目标3、PCF85634、dts配置5、内核配置6、测试验证 1、环境介绍 硬件:飞凌ok3568-c开发板 软件:原厂rk356x sdk 2、目标 开发板断电后仍正常计时。 3、PCF8563 PCF8563 是由 NXP Semiconductors 公司生产的低功耗 CMOS 实时…

图研院 | 掌握前沿图技术,从 “Graph XAI” 课程起航

在如今数字化转型加速的时代浪潮下, 图数据库技术正成为众多领域突破创新的关键力量! 你是否也渴望深入了解其背后的核心知识, 开启自己的图技术进阶之旅? 由机工社精心打造的系列大师课, 特邀国际级专家/学者师资…

Oracle考试多少分算通过?

OCP和OCM认证的考试及格分数并不是固定的,而是根据考试的难度和考生的整体表现来确定。对于OCP认证,考生需要全面掌握考试要求的知识和技能,并在考试中表现出色才有可能通过。而对于OCM认证,考生则需要在每个模块中都达到一定的水…

01.HTTPS的实现原理-HTTPS的概念

01.HTTPS的实现原理-HTTPS的概念 简介1. HTTPS的概念和安全性2. HTTPS的实现原理3. HTTPS和HTTP的区别4. OSI七层协议模型5. SSL和TLS的区别 简介 该系列文章主要讲述了HTTPS协议与HTTP协议的区别,以及HTTPS如何实现安全传输。内容分为三部分:HTTPS的实…

教师管理系统

大概功能: 1.显示所有教师 2.按姓名查找教师 3.按工号查找教师 4.增加教师 5.删除教师 6.退出 数据会保存到 txt 文件里面 姓名:必须是中文 手机号码:必须是11位,必须是数字 效果展示: 代码展示: Teache…

CSES-1687 Company Queries I(倍增法)

题目传送门https://vjudge.net/problem/CSES-1687#authorGPT_zh 解题思路 其实和倍增法求 LCA 是一样的…… 首先设 表示 号点的上面的第 个祖先是谁。 同倍增法: 然后,题目要求我们向上跳 个点。 枚举 (从大到小,想想为…

自动驾驶控制算法-横向误差微分方程LQR前馈控制

本文是学习自动驾驶控制算法第六讲 前馈控制与航向误差以及前两节的学习笔记。 1 横向误差微分方程 以规划的轨迹作为自然坐标系,计算自车在轨迹上的投影点,进而计算误差: 如图所示,横向误差为 d d d,航向误差为 θ…

后端开发如何高效使用 Apifox?

Apifox 是一个 API 协作开发平台,后端、前端、测试都可以使用 Apifox 来提升团队的工作效率。对于后端开发者而言,Apifox 的核心功能主要包括四个模块:调用 API、定义 API、开发与调试 API 以及生成 API 文档。本文将详细介绍后端开发人员如何…

【Unity3D】ECS入门学习(六)状态组件 ISystemStateComponentData

当需要获知组件是否被销毁时,ECS是没有回调告知的,因此可以将组件继承于ISystemStateComponentData接口,这样即使组件的实体被销毁了,该组件本身是不会消失的,所以可以通过在组件实体销毁后,去设置状态组件…

LeetCode 19:删除链表的倒数第N 个结点

题目: 地址:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/ 方法一: 方法二: 代码: package com.zy.leetcode.LeetCode_19;/*** Author: zy* Date: 2024-12-25-13:01* Description: 删除链表…

中学数学:一个函数值计算题

在数学的领域中,函数是一种描述变量之间关系的桥梁,它能够揭示出看似复杂现象背后的简洁规律。通过函数,我们可以预测、分析并解决实际问题。在这张图片中,我们看到了一位数学爱好者手写的解题过程,它展示了如何巧妙地…

kipotix4靶机实战

信息收集 1.判断靶机ip 原理:开靶机之前nmap扫一次网段,再开靶机之后扫一次,查看多出来的ip就是靶机ip ip192.168.98.1742.判断端口服务,系统版本 a.确定端口 b.-p指定端口进一步收集 c.信息筛选 1.端口:22,80,139,…

Xilinx FPGA的Bitstream比特流加密设置方法

关于Xilinx FPGA的Bitstream比特流加密设置方法更多信息可参阅应用笔记xapp1084。 使用加密bitstream分两个步骤: 将bitstream的AES密钥存储在FPGA芯片内将使用AES密钥加密的Bitstream通过SPI Flash或JTAG加载至FPGA芯片 AES密钥可以存储在两个存储区之一&#x…