c++ 内存管理(newdeletedelete[])

因为在c++里面新增了类,所以我们在有时候会用malloc来创建类,但是这种创建只是单纯的开辟空间,没有什么默认构造的。同时free也是free的表面,如果类里面带有指针指向堆区的成员变量就会free不干净。

所以我们c++增加了new delete和delete[]来应对类的问题。

如果还有宝子不会c语言的内存管理的,可以看这一篇->C语言内存管理

new

创建一个整形:

创建一个内容是10的整形空间:

申请十个int类型的数组:

申请十个int类型数组,并初始化:

如果是类的内存申请,会是怎么样的呢?

我们发现类每次内存申请都会调用构造函数。

我们再看:

只要我们有数据初始化,那么会调用带参构造,反之就会调用默认构造。

那我那么申请后该如何释放呢?

delete和delete[]

我们申请的单个变量用delete,数组就用delete[]:

delete和delete[]的区别

这个需要先讲他们的底层:

1、new的底层就是现malloc,然后如果是自定义类型就调用对应的析构函数。

2、delete就是调用对应的析构函数,然后用free掉

3、而delete[]不一样的就是,我们用new来申请数组的时候,如果是自定义类型的数组,那么就会额外在这个数组前面开一个内存来存储它的长度,用来看有几个变量,这样的做法主要是为了释放自定义类型(类)的。

我们看如下举例来验证:

调试后我们看到的确如此

大家不信我们可以换一下长度:

我们走完全程发现析构了六次:

如果我们直接用delete来释放数组,只会释放第一个位置的内存就会崩掉:

原因就是:我们释放内存不能只释放一块,用delete只能释放第一个数据,前后的数据还在那,或者可能把后面的内存释放完了,但是前面的存储长度的内存没有释放。

那么根据这个原理,我应该可以用delete来释放没有类的数组:

确实如此:因为delete在没有类的情况下就是一个free函数。没有类的数组前面不会有一个空间记录长度,那么从p开始就可以直接free干净。但是不建议这么写。

内存申请失败的处理方法

在C语言里面,是判断返回值是否为NULL,在c++里面就是抛异常来解决。如果有异常,可以采取相关措施释放一些不必要的堆区内存然后重新申请达到处理的目的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

22、Python之面向对象:万类霜天竞自由

引言 虽然,截止目前从来没有系统性地讲述面向对象的内容,但是阅读过前面文章的童鞋,关于Python中的面向对象应该有如下观念了: 1、Python中一切皆对象,对象有三个核心内容:id、类型、值。 2、Python中的…

2024 微信小程序 学习笔记 第二天

1. WXML 模板语法 数据绑定 事件绑定 条件渲染 列表渲染 2. WXSS 模板样式 rpx 样式导入 全局和局部样式 3. 全局配置 window tabBar 配置tabBar案例 4. 网络数据请求 Get请求 Post 请求 加载时请求 5. 案例 -本地生活(首页) 导航栏 轮播图 九宫格效果…

设计模式--创建型

实现 #include <iostream> #include <memory>// 抽象产品类 class Product {public:virtual ~Product() {}virtual void Operation() const 0; };// 具体产品 类A class ConcreteProductA : public Product {public:virtual void Operation() const override {st…

Ubuntu 22.04.4 LTS (linux) Tomcat 9 内存和线程优化

1 Apache Tomcat 9.0.91 线程 #在70行左右&#xff0c;增加如下 sudo vim /data/tomcat/conf/server.xmlmaxThreads"800" #客户请求最大线程数minSpareThreads"200" #最小线程数maxSpareThreads"500" #最大线程数acceptCount"800"…

unity2D游戏开发05摄像跟踪

图形设置 打开项目设置 选择Quality,关闭抗锯齿功能和各向异性纹理。 抗锯齿算法在对象的边缘上运行,并为其提供平滑的外观以补偿锯齿形状的输出效果,但我们不需要对像素艺术风格的2D游戏进行抗锯齿处理。 各向异性过滤是一种在使用特定类型的摄像机视角时提高图像质量的方…

单例模式_Golang

目录 一、单例模式 1.1 基本概念 1.2 使用场景 二、Golang实现 2.1 懒汉模式&#xff08;Lazy Loading&#xff09; 一、单例模式 1.1 基本概念 一个类只能生成一个实例&#xff0c;且该类能自行创建这个实例的一种模式,这个定义个人感觉可以拆的通俗一些,在项目的生命周…

【轨物方案】开关柜在线监测物联网解决方案

随着物联网技术的发展&#xff0c;电力设备状态监测技术也得到了迅速发展。传统的电力成套开关柜设备状态监测方法主要采用人工巡检和定期维护的方式&#xff0c;这种方法不仅效率低下&#xff0c;而且难以保证设备的实时性和安全性。因此&#xff0c;基于物联网技术的成套开关…

Android中systrace配置及注意问题

Android中systrace配置及注意问题 systrace配置的官方文档地址如下&#xff1a;优化启动时间 Systrace systrace 允许在启动期间收集内核和 Android 跟踪记录。systrace 的可视化可以帮助分析启动过程中的具体问题。&#xff08;不过&#xff0c;如果要查看整个启动过程中的平…

抖音私信卡片跳转微信教程

以下是使用 W 外链制作抖音私信卡片跳转微信的一般教程&#xff1a; ​ **步骤一&#xff1a;准备工作** 1. 注册并登录 W 外链平台账号。 2. 并获取相关的链接或二维码。 **步骤二&#xff1a;创建跳转链接** 1. 在 W 外链平台中&#xff0c;选择创建新的跳转链接。 2.…

llama模型,nano

目录 llama模型 Llama模型性能评测 nano模型是什么 Gemini Nano模型 参数量 MMLU、GPQA、HumanEval 1. MMLU(Massive Multi-task Language Understanding) 2. GPQA(Grade School Physics Question Answering) 3. HumanEval llama模型 Large Language Model AI Ll…

基于MediaPipe的手部特征点识别

基于MediaPipe的手部特征点识别 MediaPipe简介 MediaPipe Solutions 提供了一套库和工具&#xff0c;可以在安卓或者windows应用中快速应用人工智能 (AI) 和机器学习 (ML) 技术。 MediaPipe 手部地标任务可检测图片中手部的特征点。识别效果如下 环境配置 python -m pip ins…

GRE VPN和MGRE VPN综合练习

GRE VPN和MGRE VPN综合练习 实验拓扑 实验要求 1、R5为ISP&#xff0c;只能进行IP地址配置&#xff0c;其所有地址均配为公有IP地址; 2、R1和R5间使用PPP的PAP认证&#xff0c;R5为主认证方; R2与R5之间使用ppp的CHAP认证&#xff0c;R5为主认证方; R3与R5之间使用HDLC封装;…

【vue3|第18期】Vue-Router路由的三种传参方式

日期:2024年7月17日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^ 1.01365 = 37.7834;0.99365 = 0.0255 1.02365 = 1377.408…

设计模式14-享元模式

设计模式14-享元模式 由来动机定义与结构代码推导特点享元模式的应用总结优点缺点使用享元模式的注意事项 由来动机 在很多应用中&#xff0c;可能会创建大量相似对象&#xff0c;例如在文字处理器中每个字符对象。在这些场景下&#xff0c;如果每个对象都独立存在&#xff0c…

「12月·长沙」第四届机器人、自动化与智能控制国际会议(ICRAIC 2024)

随着科技的飞速发展&#xff0c;智能机器人在当今社会的重要性愈发凸显。从制造业的自动化生产线&#xff0c;到医疗领域的手术机器人&#xff0c;再到家庭生活中的智能助手&#xff0c;机器人与人工智能的融合正在改变着我们的生产和生活方式。第四届机器人、自动化与智能控制…

如何通过smtp设置使ONLYOFFICE协作空间服务器可以发送注册邀请邮件

什么是ONLYOFFICE协作空间 ONLYOFFICE协作空间&#xff0c;是Ascensio System SIA公司出品的&#xff0c;基于Web的&#xff0c;开源的&#xff0c;跨平台的&#xff0c;在线文档编辑和协作的解决方案。在线Office包含了最基本的办公三件套&#xff1a;文档编辑器、幻灯片编辑…

鸿蒙 动态共享包HSP的创建和引用

1.什么是动态共享包HSP HSP&#xff08;Harmony Shared Package&#xff09;是动态共享包&#xff0c;可以包含代码、C库、资源和配置文件&#xff0c;通过HSP可以实现代码和资源的共享。HSP不支持独立发布&#xff0c;而是跟随其宿主应用的APP包一起发布&#xff0c;与宿主应…

vue3前端开发-小兔鲜项目-form表单的统一校验

vue3前端开发-小兔鲜项目-form表单的统一校验&#xff01;实际上&#xff0c;为了安全起见&#xff0c;用户输入的表单信息&#xff0c;要满足我们的业务需求&#xff0c;参数类型等种种标准之后&#xff0c;才会允许用户向服务器发送登录请求。为此&#xff0c;有必要进行一次…

MySQL第四次作业

先创建库和表 处理表 1. 修改 student 表中年龄(sage)字段属性&#xff0c;数据类型由 int 改变为 smallint ALTER TABLE student MODIFY sage SMALLINT; 2. 为 Course 表中 Cno 课程号字段设置索引&#xff0c;并查看索引 ALTER TABLE course ADD INDEX index_cno (Cno); …

Electron 结合 Selenium + chromedriver 驱动服务实现浏览器多开

背景 在调研浏览器多开的过程中&#xff0c;electron 有自带的 browserview&#xff0c;webview&#xff0c;但是上面两个受制于 electron 内核版本限制&#xff0c;升级不够灵活&#xff0c;对新版的网页支持可能不及时&#xff0c;甚至不兼容&#xff0c;必须通过发布新的客…