详解c++:new和delete

文章目录

  • 前言
  • 一、new和malloc
    • new的用法(爽点)
    • 自动构造
  • delete和free
    • delete的用法(爽点)
  • 提醒


前言

提示:这里可以添加本文要记录的大概内容:

在C++中,new 和 delete 是两个非常重要的操作符,它们用于在堆(heap)上动态地分配和释放内存。这是与在栈(stack)上自动分配内存(例如,通过局部变量)或全局/静态分配内存(例如,全局变量或静态变量)的主要区别。使用堆内存可以让你在程序运行时根据需要动态地分配任意大小的内存块,并在不再需要时显式地释放这些内存块。下面我将全面且深刻的讲解new和delete且与malloc和free比较


提示:以下是本篇文章正文内容,下面案例可供参考

一、new和malloc

在c语言中我们创建空间是用malloc而malloc是一个函数而new是一个操作符在用法上也有很大的不同malloc要自己创建空间大小而new会自己创建,malloc创建空间时不会初始化而new会初始化这样的差别有很多我们通过一些简单的列子来做比较

//mallocint *i = (int*)malloc(sizeof(int));//newint* i = new int;

同样是创建一个int指针i单从打字的角度可以看出new的方便,但是这不单单是只有这么一小点差别哦,new的爽点还没开始

new的用法(爽点)

在malloc的使用中我们需要将它单独拿出来但是在new中却不用这么麻烦可以直接赋值

//mallocint *i = (int*)malloc(sizeof(int));*i = 9;//newint *i=new int9);

在new中可以直接在new后面确定空间的类型比如说int再在后面加它的值(9),这一个可能你没有感觉但是如果你有多个需要你赋值的空间呢?
多个空间赋值

//malloc
int *i = (int*)malloc(10 * sizeof(int)); if (i == NULL) {  printf("内存分配失败\n");  return 1; // 返回一个错误码  }  for (int j = 0; j < 10; j++) {  i[j] = j ;  }  //newint* i = new int[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//明显new的用法更爽(new也可以用for循环来赋值)

对于多个值的赋予new可以直接用大括号加值来赋予(单独的值可以直接用小括号来赋予值详细可以看上面的列子),并且不知道你是否注意到了new没有判断是否空间赋值成功,这是因为new会自动判断并报错空间不足你可以用这段代码来看看它的自动报错注意使用x86环境(不是博主不给贴图只是它不给我报错啊,空间一直足够我都用到 i21了第一次对堆的大小有了直观感受,要知道这一个 i 就是41,943,040 字节啊,不要说是已经出错了我将它的地址给打印出来的)

自动判断空间大小并报错

 int* i = new int[1024*1024*10] ;int* i1 = new int[1024 * 1024 * 10];int* i2 = new int[1024 * 1024 * 10];int* i3 = new int[1024 * 1024 * 10];int* i4= new int[1024 * 1024 * 10];int* i5 = new int[1024 * 1024 * 10];int* i6= new int[1024 * 1024 * 10];

(在执行这段代码时如果你有幸看到了报错信息还请发一下图片在评论区)比如这段代码

class text
{public:text(){cout << "text" << endl;}~text(){cout << "~text" << endl;}
private:
};
int main()
{text *a=new text  ;delete a;}

它会创建一个text类
在这里插入图片描述

自动构造

在使用类的时候我们无法用malloc来创建一个类但是new却可以

delete和free

在c语言中我们释放空间时用的是free但是用free时总是要把它定义成空指针非常麻烦所以delete来了

delete的用法(爽点)

delete是不需要将你开辟的空间定义为空的它会自动析构比如

#include<iostream>int* i = new int(3);cout << i << endl;cout << *i << endl;delete (i);cout << i << endl;cout << *i << endl;

它的运行结果是这样的在这里插入图片描述
可以看出它已经将值自动消除且将它的地址归于系统了,这对于资源管理和防止内存泄漏至关重要。 但是free就需要你苦兮兮的将值归0且要将它定为NULL

提醒

malloc和free是一对而new和delete是一对不要将它们拆散也不要将它们错误匹配

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频

Android早期的MediaPlayer控件对于网络视频的兼容性很差&#xff0c;所以后来单独推出了Exoplayer库增强支持网络视频&#xff0c;在《Android Studio开发实战&#xff1a;从零基础到App上线(第3版)》一书第14章的“14.3.3 新型播放器ExoPlayer”就详细介绍了Exoplayer库的详细…

【Python】从基础到进阶(八):文件操作与上下文管理

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、Python文件操作基础1. 打开文件2. 读取文件3. 写入文件4. 文件指针定位 三、上下文管理1. 使用with管理文件2. 自定义上下文管理器 四、文件操作的最佳实践五、案例&#xff1a;日志文件管理1. 需求分析2. 实现…

OpenCV结构分析与形状描述符(24)检测两个旋转矩形之间是否相交的一个函数rotatedRectangleIntersection()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 测两个旋转矩形之间是否存在交集。 如果存在交集&#xff0c;则还返回交集区域的顶点。 下面是一些交集配置的例子。斜线图案表示交集区域&#…

从边缘设备到云端平台,合宙DTURTU打造无缝物联网解决方案

如今&#xff0c;物联网&#xff08;IoT&#xff09;技术飞速发展&#xff0c;万物互联的时代已然到来&#xff0c;那么&#xff0c;高效、稳定地连接边缘设备与云端平台&#xff0c;实现数据的实时采集、传输与处理&#xff0c;就成为了推动物联网应用落地的关键。 DTU&#…

以root用户登陆ubuntu的桌面环境

去我的个人博客观看&#xff0c;观感更佳哦&#xff0c;&#x1f619;&#x1f619; 前言 在学习Linux的时候&#xff0c;经常都需要使用sudo权限来对配置文件进行修改&#xff0c;常用的方法就是用vim编辑器在命令行界面进行修改&#xff0c;比如sudo vim /etc/profile&#…

【深度学习】(1)--神经网络

文章目录 深度学习神经网络1. 感知器2. 多层感知器偏置 3. 神经网络的构造4. 模型训练损失函数 总结 深度学习 深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向。 从上方的内容包含结果&#xff0c;我们可以知道&#xff0c;在学习深度学…

【Linux】解锁系统编程奥秘,高效文件IO的实战技巧

文件 1. 知识铺垫2. C文件I/O2.1. C文件接口2.2 fopen()与重定向2.3. 当前路径2.4. stdin、stdout、stderr 3. 系统文件I/O3.1. 前言3.2. open3.2.1. flags</h3>3.2.2. mode</h3>3.2.3. 返回值fd 3.3. write</h2>3.4. read3.5. close</h2>3.6. lseek&l…

面试经典150题——删除有序数组中的重复项

目录 题目链接&#xff1a;26. 删除有序数组中的重复项 - 力扣&#xff08;LeetCode&#xff09; 题目描述 判题标准: 示例 提示&#xff1a; 解法一&#xff1a;双指针 Java写法&#xff1a; 运行时间 C写法&#xff1a; 运行时间 论屎山代码是如何出现的 时间复杂…

感知笔记2:ROS 视觉 - 沿线行走

如何在 ROS 中使用 OpenCV如何跟踪线路如何根据颜色查找不同元素跟踪多条路径并做出决定为线路跟踪创建基本的 PID 在本章中&#xff0c;您将学习如何使用 ROS 中最基本、最强大的感知工具&#xff1a;OpenCV。 OpenCV 是最广泛、最完整的图像识别库。有了​​它&#xff0c;…

Docker实操:安装MySQL5.7详解(保姆级教程)

介绍 Docker 中文网址: https://www.dockerdocs.cn Docker Hub官方网址&#xff1a;https://hub.docker.com Docker Hub中MySQL介绍&#xff1a;https://hub.docker.com/_/mysql ​ 切换到“Tags”页面&#xff0c;复制指定的MySQL版本拉取命令&#xff0c;例如 &#xff1a…

uv-ui组件的使用——自定义输入框的样式

一、官网的使用 二、自定义修改样式 我是在小程序中使用此组件 想要自定义修改样式的话&#xff0c;需要placeholderClass加上 placeholderStyle配合使用 tip1&#xff1a;单独使用placeholderClass&#xff0c;他只会第一次渲染时生效&#xff0c;输入文字再清除后就不生效…

十六,Spring Boot 整合 Druid 以及使用 Druid 监控功能

十六&#xff0c;Spring Boot 整合 Druid 以及使用 Druid 监控功能 文章目录 十六&#xff0c;Spring Boot 整合 Druid 以及使用 Druid 监控功能1. Druid 的基本介绍2. 准备工作&#xff1a;3. Druid 监控功能3.1 Druid 监控功能 —— Web 关联监控3.2 Druid 监控功能 —— SQL…

(蓝桥杯)STM32G431RBT6(TIM4-PWM)

一、基础配置 这个auto-reload preload是自动重装载值&#xff0c;因为我们想让他每改变一个占空比&#xff0c;至少出现一次周期 Counter Period(Autoreload Regisiter)这个设值为10000&#xff0c;那么就相当于它的周期是10000 脉冲宽度可以设置为占周期的一半&#xff0c;那…

Python酷库之旅-第三方库Pandas(123)

目录 一、用法精讲 546、pandas.DataFrame.ffill方法 546-1、语法 546-2、参数 546-3、功能 546-4、返回值 546-5、说明 546-6、用法 546-6-1、数据准备 546-6-2、代码示例 546-6-3、结果输出 547、pandas.DataFrame.fillna方法 547-1、语法 547-2、参数 547-3、…

opencv图像透视处理

引言 在图像处理与计算机视觉领域&#xff0c;透视变换&#xff08;Perspective Transformation&#xff09;是一种重要的图像校正技术&#xff0c;它允许我们根据图像中已知的四个点&#xff08;通常是矩形的四个角&#xff09;和目标位置的四个点&#xff0c;将图像从一个视…

Ubuntu 与Uboot网络共享资源

1、NFS 1.1 Ubuntu 下 NFS 服务开启 sudo apt-get install nfs-kernel-server rpcbind 等待安装完成&#xff0c;安装完成以后在用户根目录下创建一个名为“Linux”的文件夹&#xff0c;以后所有 的东西都放到这个“Linux”文件夹里面&#xff0c;在“Linux”文件夹里面新建…

[Simpfun游戏云1]搭建MC Java+基岩互通生存游戏服务器

众所周知&#xff0c;MC有多个客户端&#xff0c;像常见的比如Java Edition和基岩等&#xff0c;这就导致&#xff0c;比如我知道一个超级好玩的JE服务器&#xff0c;但我又想使用基岩版来玩&#xff0c;肯定是不行的&#xff0c;因为通讯协议不一样。 这就有一些人才发明了多…

搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(四)-搜索

搜索 搜索内容比较多&#xff0c;onesearch分成两部分&#xff0c;第一部分&#xff0c;Query构建&#xff0c;其中包括搜索词设置&#xff0c;设置返回字段&#xff0c;filter&#xff0c;高亮&#xff1b;第二部分分页和排序。第一部分是映射引擎负责&#xff0c;映射通用表…

常见中间件漏洞靶场(tomcat)

1.CVE-2017-12615 开启环境 查看端口 查看IP 在哥斯拉里生成一个木马 访问页面修改文件后缀和文件内容 放包拿去连接 2.后台弱⼝令部署war包 打开环境 将前边的1.jsp压缩成1.zip然后改名为1.war 访问页面进行上传 在拿去连接 3.CVE-2020-1938 打开环境 访问一下 来到kali …

错题集锦之C语言

直接寻址和立即寻址 算法的又穷性是指算法程序的运行时间是有限的 未经赋值的全局变量值不确定 集成测试是为了发现概要设计的错误 自然连接要求两个关系中进行比较的是相同的属性&#xff0c;并且进行等值连接&#xff0c;在结果中还要把重复的属性列去掉 赋值运算符 赋值…