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

C++ 中 new 和 delete 详解,以及与 C 中 malloc 和 free 的区别

1. C++ 中 new delete 的基本用法

在 C++ 中,newdelete 是用来动态分配和释放内存的关键字,它们是面向对象的替代方式,提供了比 C 语言更优雅的内存管理工具。

1.1 new 的使用

new 用于从堆中分配内存,并且自动调用对象的构造函数来初始化分配的内存。

int* p = new int;      // 分配一个整数
int* arr = new int[5]; // 分配一个整数数组class MyClass {
public:MyClass() { /* 构造函数 */ }
};MyClass* obj = new MyClass(); // 分配一个 MyClass 对象并调用构造函数

 1.2 delete 的使用

delete 用于释放由 new 分配的内存,并调用对象的析构函数来进行清理工作。

delete p;       // 释放单个整数的内存
delete[] arr;   // 释放数组内存delete obj;     // 释放 MyClass 对象的内存并调用析构函数

delete delete[] 是不同的操作符,delete[] 主要用于释放数组的内存

2. C 语言中的 malloc free 的基本用法

2.1 malloc 的使用malloc - C++ Reference (cplusplus.com)

malloc  函数用于从堆中分配一块连续的内存,返回指向这块内存的指针。

int* p = (int*)malloc(sizeof(int));    // 分配一个整数大小的内存
int* arr = (int*)malloc(5 * sizeof(int)); // 分配一个大小为5的整数数组

2.2 free 的使用free - C++ Reference (cplusplus.com)

free 函数用于释放由 malloc 分配的内存。

free(p);  // 释放单个整数内存
free(arr); // 释放数组内存

需要注意的是,malloc 只分配内存,不会初始化内存中的内容,free 也不会执行析构函数之类的清理工作。

3. new/delete 和 malloc/free 的区别

 3.1 语法与功能上的区别

  • new/delete 是运算符,而 malloc/free 是函数。

  • new 会调用类的构造函数,delete 会调用析构函数

  • mallocfree 仅仅分配和释放内存,不涉及对象初始化和清理。

3.2 类型安全

  • new 不需要显式类型转换,因为它返回正确的类型指针。

  • malloc 返回 void*,因此需要进行显式类型转换。

  • // C++ 使用 new,类型转换是隐式的
    int* p = new int;// C 使用 malloc,需要显式转换
    int* p = (int*)malloc(sizeof(int));
    

3.3⚠️⚠️⚠️内存分配失败的处理方式

  • new 在内存分配失败时会抛出异常,可以捕获进行错误处理。

  • malloc 在分配失败时返回 NULL,需要检查返回值来判断是否成功。

  • try {int* p = new int[10000000000]; // 分配内存失败会抛出异常
    } catch (std::bad_alloc& e) {std::cerr << "Memory allocation failed: " << e.what() << std::endl;
    }int* p = (int*)malloc(10000000000 * sizeof(int));
    if (p == NULL) {printf("Memory allocation failed\n");
    }
    

    4,两种代码对比直接下拉

🌟🌟🌟 整数🌟🌟🌟

使用 new/delete

int* p = new int(42); // 分配一个整数并初始化为42
std::cout << *p << std::endl; // 输出:42
delete p; // 释放内存

使用 malloc/free

int* p = (int*)malloc(sizeof(int));
*p = 42; // 初始化内存
printf("%d\n", *p); // 输出:42
free(p); // 释放内存

🌟🌟🌟数组 🌟🌟🌟

使用 new/delete[]

int* arr = new int[5] {1, 2, 3, 4, 5};
for (int i = 0; i < 5; ++i) {std::cout << arr[i] << " "; // 输出:1 2 3 4 5
}
delete[] arr; // 释放数组内存

 使用 malloc/free

int* arr = (int*)malloc(5 * sizeof(int));
for (int i = 0; i < 5; ++i) {arr[i] = i + 1;printf("%d ", arr[i]); // 输出:1 2 3 4 5
}
free(arr); // 释放数组内存

复盘🐂

  • new/delete 是 C++ 专有的动态内存管理工具,它们不仅分配和释放内存,还会调用构造函数和析构函数,适合用于面向对象编程。

  • malloc/free 是 C 语言中的动态内存管理函数,它们只负责分配和释放内存,不会进行对象的初始化和清理。

  • new 具有类型安全性,而 malloc 需要显式类型转换。

  • 在内存分配失败时new 抛出异常,而 malloc 返回 NULL

共勉 💪

同为未来的it人让我们在共同进步吧。

我很喜欢雷军的一段话:我们就悄悄的干,就算失败了咱也不丢人

相关文章:

C++ 中 new 和 delete 详解,以及与 C 中 malloc 和 free 的区别

1. C 中 new 和 delete 的基本用法 在 C 中&#xff0c;new 和 delete 是用来动态分配和释放内存的关键字&#xff0c;它们是面向对象的替代方式&#xff0c;提供了比 C 语言更优雅的内存管理工具。 1.1 new 的使用 new 用于从堆中分配内存&#xff0c;并且自动调用对象的构造…...

YOLOv11来了 | 自定义目标检测

概述 YOLO11 在 2024 年 9 月 27 日的 YOLO Vision 2024 活动中宣布&#xff1a;https://www.youtube.com/watch?vrfI5vOo3-_A。 YOLO11 是 Ultralytics YOLO 系列的最新版本&#xff0c;结合了尖端的准确性、速度和效率&#xff0c;用于目标检测、分割、分类、定向边界框和…...

Vue3 集成Monaco Editor编辑器

Vue3 集成Monaco Editor编辑器 1. 安装依赖2. 使用3. 效果 Monaco Editor &#xff08;官方链接 https://microsoft.github.io/monaco-editor/&#xff09;是一个由微软开发的功能强大的在线代码编辑器&#xff0c;被广泛应用于各种 Web 开发场景中。以下是对 Monaco Editor 的…...

一文详解Mysql索引

背景 索引是存储引擎用于快速找到一条记录的数据结构。索引对良好的性能非常关键。尤其是当表中的数据量越来越大时&#xff0c;索引对性能的影响愈发重要。接下来&#xff0c;就来详细探索一下索引。 索引是什么 索引&#xff08;Index&#xff09;是帮助数据库高效获取数据的…...

基于JAVA+SpringBoot+Vue的旅游管理系统

基于JAVASpringBootVue的旅游管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345; 哈喽兄…...

STM32_实验3_控制RGB灯

HAL_Delay 是 STM32 HAL 库中的一个函数&#xff0c;用于在程序中产生一个指定时间的延迟。这个函数是基于系统滴答定时器&#xff08;SysTick&#xff09;来实现的&#xff0c;因此可以实现毫秒级的延迟。 void HAL_Delay(uint32_t Delay); 配置引脚&#xff1a; 点击 1 到 IO…...

RISC-V笔记——Pipeline依赖

1. 前言 RISC-V的RVWMO模型主要包含了preserved program order、load value axiom、atomicity axiom、progress axiom和I/O Ordering。今天主要记录下preserved program order(保留程序顺序)中的Pipeline Dependencies(Pipeline依赖)。 2. Pipeline依赖 Pipeline依赖指的是&a…...

构建后端为etcd的CoreDNS的容器集群(六)、编写自动维护域名记录的代码脚本

本文为系列测试文章&#xff0c;拟基于自签名证书认证的etcd容器来构建coredns域名解析系统。 一、前置文章 构建后端为etcd的CoreDNS的容器集群&#xff08;一&#xff09;、生成自签名证书 构建后端为etcd的CoreDNS的容器集群&#xff08;二&#xff09;、下载最新的etcd容…...

Leetcode 剑指 Offer II 098.不同路径

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下…...

LabVIEW智能螺杆空压机测试系统

基于LabVIEW软件开发的螺杆空压机测试系统利用虚拟仪器技术进行空压机的性能测试和监控。系统能够实现对螺杆空压机关键性能参数如压力、温度、流量、转速及功率的实时采集与分析&#xff0c;有效提高测试效率与准确性&#xff0c;同时减少人工操作&#xff0c;提升安全性。 项…...

在 Ubuntu 22.04 上安装 PHP 8.2

在 Ubuntu 22.04 上安装 PHP 8.2&#xff0c;可以按照以下步骤进行&#xff1a; 更新系统软件包&#xff1a; 首先&#xff0c;确保你的系统软件包是最新的。 sudo apt update sudo apt upgrade 安装 PHP PPA&#xff08;Personal Package Archive&#xff09;&#xff1a; U…...

Java生死簿管理小系统(简单实现)

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…...

【VoceChat】一个即时聊天(IM)软件,又是一个可以嵌入任何网页聊天系统

为什么要搭建私人聊天软件 在当今数字化时代&#xff0c;聊天软件已经成为人们日常沟通和协作的重要工具。市面上的公共聊天平台虽然方便&#xff0c;但也伴随着诸多隐私、安全、广告和功能限制的问题。对于那些注重数据安全、追求高效沟通的个人或团队来说&#xff0c;搭建一…...

【LeetCode】动态规划—96. 不同的二叉搜索树(附完整Python/C++代码)

动态规划—96. 不同的二叉搜索树 题目描述前言基本思路1. 问题定义2. 理解问题和递推关系二叉搜索树的性质&#xff1a;核心思路&#xff1a;状态定义&#xff1a;状态转移方程&#xff1a;边界条件&#xff1a; 3. 解决方法动态规划方法&#xff1a;伪代码&#xff1a; 4. 进一…...

Nginx UI 一个可以管理Nginx的图形化界面工具

Nginx UI 是一个基于 Web 的图形界面管理工具&#xff0c;支持对 Nginx 的各项配置和状态进行直观的操作和监控。 Nginx UI 的功能非常丰富&#xff1a; 在线查看服务器 CPU、内存、系统负载、磁盘使用率等指标 在线 ChatGPT 助理 一键申请和自动续签 Let’s encrypt 证书 在…...

Vue向上滚动加载数据时防止内容闪动

目前的需求&#xff1a;当前组件向上滚动加载数据&#xff0c;dom加载完后&#xff0c;页面的元素位置不能发生变化 遇到的问题&#xff1a;加载完数据后&#xff0c;又把滚轮滚到之前记录的位置时&#xff0c;内容发生闪动 现在的方案&#xff1a; 加载数据之前记录整体滚动条…...

基于QT、ARM的智能停车管理系统+高分项目+源码

Parking-management-system 本系统基于QT、ARM开发板、Linux系统并对接百度AI 1.1 项目目的: 创建一个智能停车管理系统&#xff0c;能够停入车辆和取出车辆以及查询车辆停入停车场的状态并且计算车辆离开时收费情况。 1.2 项目意义: 实现停车场智能抬杆和智能收费系统&…...

1.6,unity动画Animator屏蔽某个部位,动画组合

动画组合 一边跑一边攻击 using System.Collections; using System.Collections.Generic; using UnityEngine;public class One : MonoBehaviour {private Animator anim;// Start is called before the first frame updatevoid Start(){anim GetComponent<Animator>();…...

发动机冷却系统排空气

发动机冷却系统排空气的几种常见方法 发动机冷却系统是汽车发动机的重要组成部分&#xff0c;它的主要作用是通过循环冷却液来吸收和散发发动机产生的热量&#xff0c;确保发动机在正常工作温度下运行。然而&#xff0c;在冷却系统的运行过程中&#xff0c;由于各种原因&#…...

三周精通FastAPI:1 第一步入门

FastAPI是一个非常棒的python web和api框架&#xff0c;准备用三周的时间“精通它” 学习流程参考FastAPI官网的用户教程&#xff1a;教程 - 用户指南 - FastAPI 学前提示 运行代码 所有代码片段都可以复制后直接使用&#xff08;它们实际上是经过测试的 Python 文件&#x…...

告别C盘战士!ArcGIS 10.6安装路径选择与磁盘空间优化全攻略

告别C盘战士&#xff01;ArcGIS 10.6安装路径选择与磁盘空间优化全攻略当GIS初学者第一次安装ArcGIS 10.6时&#xff0c;往往会被其庞大的安装体积所震惊。许多用户习惯性地点击"下一步"&#xff0c;结果发现C盘空间被迅速吞噬&#xff0c;系统运行变得迟缓。本文将深…...

阿波罗登月,不可能:读心术与影子叙事 ——不是向全世界展示登月,而是向全世界注射登月

阿波罗登月&#xff0c;不可能&#xff1a;读心术与影子叙事 ——不是向全世界展示登月&#xff0c;而是向全世界注射登月 Jianbing Zhu 1^{1}1 1^{1}1 ECT-OS-JiuHuaShan 文明实验室 ORCID: 0009-0006-8591-1891 DOI: 10.5281/zenodo.20373157 Email: ect-os-jiuhuashanzoho…...

PCL 基于强度的双边滤波【2026最新版】

目录 一、算法原理 1、计算步骤 2、算法源码 3、函数解析 4、参考文献 二、代码实现 三、结果展示 四、滤波后未发生变化的原因 五、解决办法 六、结果展示 七、相关链接 本文由CSDN点云侠原创,博客长期更新,本文最近一次更新时间为:2026年5月24日。 一、算法原理 1、计算…...

告别Postman!用APIfox搞定接口测试+自动化,这份保姆级教程带你从环境配置到报告生成

从Postman到APIfox&#xff1a;接口测试自动化的高效迁移指南如果你还在为接口测试中的重复劳动和多环境切换头疼&#xff0c;是时候考虑从Postman迁移到APIfox了。作为一名经历过这个转型过程的开发者&#xff0c;我想分享一些实战经验&#xff0c;帮助你平滑过渡并最大化利用…...

全球无障碍宣传日:iOS 26 辅助功能大升级,这些实用小功能你用过吗?

辅助功能发展与升级很多人对辅助功能的印象还停留在 "小白点"&#xff0c;但随着 iPhone 进入全面屏时代&#xff0c;它逐渐变得陌生。实际上&#xff0c;Apple 每年都会为其增添功能&#xff0c;方便身体有障人士使用 iPhone。而且&#xff0c;这些功能不仅惠及有障…...

2026论文顶级降AI率工具大曝光:一键把AIGC率降至安全线!

步入2026年&#xff0c;学术圈的规则已经彻底变了味。过去那种只盯着查重率的“降重焦虑”早就被更可怕的“降AI焦虑”取代了。AI检测算法越来越聪明&#xff0c;高校审核标准也越来越严苛&#xff0c;光是把重复率压下去已经完全不够用了。现在摆在学生和科研人员面前的难题是…...

PrivacyGuard实战:基于实证差分隐私的机器学习模型隐私审计框架

1. 项目概述与核心价值在过去的几年里&#xff0c;我亲眼见证了机器学习模型从实验室走向银行、医疗、社交网络等各个敏感领域的全过程。模型性能的每一次飞跃都令人兴奋&#xff0c;但随之而来的隐私泄露事件也一次次为我们敲响警钟。一个在医疗数据上训练出的诊断模型&#x…...

如何快速实现U盘文件自动备份:USBCopyer终极指南

如何快速实现U盘文件自动备份&#xff1a;USBCopyer终极指南 【免费下载链接】USBCopyer &#x1f609; 用于在插上U盘后自动按需复制该U盘的文件。”备份&偷U盘文件的神器”&#xff08;写作USBCopyer&#xff0c;读作USBCopier&#xff09; 项目地址: https://gitcode.…...

别只盯着主控芯片!拆解STM32最小系统板:电源、时钟、复位三大支柱电路深度解析

STM32最小系统板设计进阶&#xff1a;电源、时钟与复位电路的工程实践 在嵌入式系统开发中&#xff0c;我们常常将注意力集中在主控芯片的功能实现上&#xff0c;却忽略了支撑系统稳定运行的三大基础电路——电源、时钟和复位。这些看似简单的电路模块&#xff0c;实则是整个系…...

Safe Exam Browser虚拟机绕过实战:深度解析与安全研究指南

Safe Exam Browser虚拟机绕过实战&#xff1a;深度解析与安全研究指南 【免费下载链接】safe-exam-browser-bypass A VM and display detection bypass for SEB. 项目地址: https://gitcode.com/gh_mirrors/sa/safe-exam-browser-bypass 在数字化教育快速发展的今天&…...