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

【C++笔记】C++内存管理

【C++笔记】C++内存管理

  • 一、C++中动态内存申请的方式
  • 二、new和delete的实现原理
    • 2.1、operator new和operator delete函数

一、C++中动态内存申请的方式

在C语言中我们需要动态申请空间的时候我们通常都是用malloc函数,但是malloc函数对自定义类型是没什么问题的,但是对于自定义类型就不那么适用了。
因为malloc函数负责的只是开空间,并不会去调用类的构造函数:
在这里插入图片描述
如果是像栈这样的有额外申请空间的类,没有初始化这将是一件很危险的事情,因为我们后面向栈中插入数据的时候就一定会出错(野指针)。

所以为了解决这样的问题,C++就设计了套新的动态内存申请的方案,即new和delete。

在C语言中使用malloc动态申请的空间不仅需要我们强转成指定的指针类型而且还需要我们手动计算空间的大小:
在这里插入图片描述
但在C++中使用new,我们不需要强转而且只需要给出数据的个数即可:
在这里插入图片描述
如果只是申请一个int空间,那就不用再int后面加[]:
在这里插入图片描述
并且对于自定义类型,new也会去自动调用构造函数:
在这里插入图片描述
像C语言一样,动态申请的空间默认不会去初始化:
在这里插入图片描述
但C++支持在动态申请的同时去给空间初始化:
在这里插入图片描述
而且也像C语言一样未指定初始化的数据就是用0来做默认值。

如果只是申请一个空间就是用括号:
在这里插入图片描述
这其实也就是像自定义类型一样去调用构造函数:
在这里插入图片描述
而如果是多个对象的话,我们就可以用到匿名对象或饮食类型转换:
在这里插入图片描述
而且从结果来看,如果没有指定构造的话就回去调用是用默认构造的缺省值。

说完new,我们再来说delete,对于内置类型来说new和delete与malloc和free几乎没什么区别,我们主要来说说自定义类型:
在这里插入图片描述
对于自定义类型,delete会去调用析构函数,这是free函数所欠缺的。

如果只是单个对象,我们我们就不用加[]:
在这里插入图片描述

二、new和delete的实现原理

2.1、operator new和operator delete函数

其实new和delete的底层还是使用malloc和free实现的,但他们并不能直接调用malloc和free。因为使用new如果空间申请失败的话是要抛异常的,并且delete要去调用析构函数。
而malloc如果空间申请失败的话就直接返回0了(空指针),free也只是单纯的释放空间并不会去调用析构函数。
所以C++需要对malloc和free进行“封装”,封装成两个函数:operator new和operator delete。

我们现在来看看库中的operator new和operator delete的实现:
在这里插入图片描述
在这里插入图片描述
我们会发现其实里面还是用到了malloc和free的,至于其他的那些看不懂的都是跟异常现相关的。我们现在可以不理会。

相关文章:

【C++笔记】C++内存管理

【C笔记】C内存管理 一、C中动态内存申请的方式二、new和delete的实现原理2.1、operator new和operator delete函数 一、C中动态内存申请的方式 在C语言中我们需要动态申请空间的时候我们通常都是用malloc函数,但是malloc函数对自定义类型是没什么问题的&#xff0…...

十四五双碳双控时代下的“低碳认证”

目录 前言 十四五双碳双控时代下的“低碳认证” 一、关于“低碳认证” 二、低碳认证优势 三、环境产品认证EPD 四、EPD相关运营机构 五、碳中和相关机构 六、EPD的认证流程 七、低碳产品认证认证流程和要求 八、相关机构认证证书样例 九、证书附件表 前言 通过本篇文…...

Android——基本控件(下)(十九)

1. 菜单:Menu 1.1 知识点 (1)掌握Android中菜单的使用; (2)掌握选项菜单(OptionsMenu)的使用; (3)掌握上下文菜单(ContextMenu&am…...

聚类分析 | MATLAB实现基于DBSCAD密度聚类算法可视化

聚类分析 | MATLAB实现基于LP拉普拉斯映射的聚类可视化 目录 聚类分析 | MATLAB实现基于LP拉普拉斯映射的聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于DBSCAD密度聚类算法可视化,MATLAB程序。 使用带有KD树加速的dbscan_with_kdtree函数进行…...

reactantd(12)动态表单的默认值问题

最近遇到一个需求是有一个表单可以输入各种信息,然后还需要有一个编辑功能,点击编辑的时候需要把当前数据填入到表单里面。在网上查了很多种方法,然后我的思路是使用initialValues搭配setState()使用。默认值都为空,然后点击单条数…...

无涯教程-Python机器学习 - Stochastic Gradient Boosting函数

它也称为梯度提升机。在下面的Python食谱中,我们将通过使用pima Indians糖尿病数据集上的 sklearn 的 GradientBoostingClassifier 类来创建随机梯度Boostingensemble模型进行分类。 首先,导入所需的软件包,如下所示: from pandas import read_csv from sklearn.model_select…...

SOLIDWORKS中多实体文件到装配体的转换技巧

我们在做机械等工程设计中,有时为了节省时间,需要把多实体的“零件”,直接转换为装配体,不再另外装配,这样能大大简化设计的操作时间,复杂程度。 在这里,我们首先要了解,SOLIDWORKS文…...

Transformer (Attention Is All You Need) 论文精读笔记

Transformer(Attention Is All You Need) Attention Is All You Need 参考:跟李沐学AI-Transformer论文逐段精读【论文精读】 摘要(Abstract) 首先摘要说明:目前,主流的序列转录(序列转录:给…...

Git企业开发控制理论和实操-从入门到深入(二)|Git的基本操作

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总https://blog.csdn.net/yu_cblog/cate…...

Positive Technologies 专家帮助修复 Western Digital 网络存储设备中的一个危险漏洞

Positive Technologies 专家帮助修复 Western Digital 网络存储设备中的一个危险漏洞 经过验证的攻击者可利用该漏洞在受攻击的设备上注入恶意软件并远程访问文件 Western Digital 感谢 Positive Technologies 专家 Nikita Abramov 发现 Western Digital NAS 固件中的一个漏洞…...

【springboot】springboot定时任务:

文章目录 一、文档:二、案例: 一、文档: 【cron表达式在线生成器】https://cron.qqe2.com/ 二、案例: EnableScheduling //开启任务调度package com.sky.task;import com.sky.entity.Orders; import com.sky.mapper.OrderMapper; …...

腾讯云学生服务器申请、学生认证入口及学生机价格表

腾讯云学生服务器申请、学生认证入口及学生机价格表,学生机申请流程,腾讯云学生服务器优惠活动:轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年,轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年&…...

pip安装mysqlclient依赖报错 /bin/sh: 1: mysql_config: not found如何解决

报错信息: Collecting mysqlclient2.1.0Downloading https://mirrors.aliyun.com/pypi/packages/de/79/d02be3cb942afda6c99ca207858847572e38146eb73a7c4bfe3bdf154626/mysqlclient-2.1.0.tar.gz (87 kB)|███████████████████████████…...

基于paddleocr的版面分析

前处理: DocTr: Document Image Transformer for Geometric Unwarping and Illumination Correction (1)几何矫正 给定一张存在几何和光照畸变的文档图像,我们首先用一个包含六个卷积模块的特征提取器对其进行特征提取&#xf…...

网工内推 | IT网工,华为、华三认证优先,15k*13薪

01 广东善能科技发展股份有限公司 招聘岗位:IT网络工程师 职责描述: 1、负责公司项目售后技术支持工作; 2、负责项目交付实施,配置调试、运维等; 3、参加合作厂商产品技术知识培训; 4、参加合作厂商工程师…...

leetcode 739. 每日温度

2023.8.28 本题用暴力双层for循环解会超时&#xff0c;所以使用单调栈来解决&#xff0c;本质上是用空间换时间。维护一个单调递减栈&#xff0c;存储的是数组的下标。 代码如下&#xff1a; class Solution { public:vector<int> dailyTemperatures(vector<int>&…...

【活体检测模型】活体检测思路推演

ref:https://arxiv.org/pdf/1611.05431.pdf https://github.com/miraclewkf/ResNeXt-PyTorch 用分类的思想做活体检测&#xff0c;要求准确的分出正负样本&#xff0c;否则&#xff0c;支付宝被别人用了&#xff0c;问题就很严重。 大部分的商用场景还是 摇摇头、张张口&#x…...

【微服务部署】03-健康检查

文章目录 1. 探针集成实现高可用1.1 LivenessProbe1.2 ReadinessProbe1.3 StartupProbe 2. 健康检查看板2.1 组件包 1. 探针集成实现高可用 LivenessReadinessStartup 1.1 LivenessProbe 判断服务是否存活结束“非存活”状态服务根据重启策略决定是否重启服务 1.2 Readines…...

SQL注入之报错注入

文章目录 报错注入是什么&#xff1f;报错注入获取cms账号密码成功登录 报错注入是什么&#xff1f; 在注入点的判断过程中&#xff0c;发现数据库中SQL 语句的报错信息&#xff0c;会显示在页面中&#xff0c;因此可以利用报错信息进行注入。 报错注入的原理&#xff0c;就是在…...

基于大数据+django+mysql的银行信用卡用户的数仓系统

系统阐述的是银行信用卡用户的数仓系统的设计与实现&#xff0c;对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计&#xff0c;描述&#xff0c;实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系统的整体架构…...

如何用WebPlotDigitizer在5分钟内从图表图片提取数据:完整免费指南

如何用WebPlotDigitizer在5分钟内从图表图片提取数据&#xff1a;完整免费指南 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 还在为从…...

Godot 4动态网格切割:实现实时物理破坏效果

1. 项目概述与核心价值 最近在Godot社区里&#xff0c;一个名为 cloudofoz/godot-smashthemesh 的开源项目引起了我的注意。乍一看这个标题&#xff0c;可能会觉得有些抽象——“粉碎网格”&#xff1f;但当你深入了解后&#xff0c;会发现它精准地解决了一个在3D游戏开发&am…...

别再用免费版硬扛交付!Pro计划中被低估的“商用素材合规审计工具”如何帮你规避97%版权风险?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;商用素材合规审计工具的底层逻辑与风险图谱 商用素材合规审计工具并非简单的关键词扫描器&#xff0c;而是融合数字水印识别、元数据溯源、许可证语义解析与跨平台版权数据库比对的复合型决策引擎。其底…...

Radiology(IF=15.2)中南大学湘雅二医院肖煜东教授等团队:基于CT放射组学的机器学习识别肝细胞癌瘤内纤维化及其潜在血管生成

01文献学习今天分享的文献是由中南大学湘雅二医院肖煜东教授等团队于2026年5月在放射学领域顶刊《Radiology》&#xff08;中科院1区top&#xff0c;IF15.2&#xff09;上发表的研究“CT Radiomics-based Machine Learning to Identify Intratumoral Fibrosis and Underlying A…...

木质防火门基础选购核心要点

在现代建筑消防配套设施体系中&#xff0c;木质防火门凭借外观质感柔和、适配各类室内装修风格、现场安装便捷灵活等优势&#xff0c;被广泛应用于住宅楼宇、商业综合体、办公写字楼、酒店公寓等各类民用与公共建筑场景&#xff0c;是建筑防火分隔、阻断烟火蔓延的核心安防构件…...

终极指南:如何在Windows上轻松安装APK文件?告别模拟器的5个简单步骤

终极指南&#xff1a;如何在Windows上轻松安装APK文件&#xff1f;告别模拟器的5个简单步骤 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否想在Windows电脑上直…...

孔子学院年度报告(2006-2024)缺2019

2024年是孔子学院成立20周年&#xff0c;全球孔子学院以“20岁&#xff0c;孔子学院正青春”为主题&#xff0c;在教育教学、文化交流、数字化建设等多方面取得丰硕成果&#xff0c;持续成为中外语言互通与文明互鉴的重要桥梁。截至2024年底&#xff0c;全球161个国家和地区已设…...

WordPress至PageAdmin CMS跨平台迁移技术指南:应对环境约束的系统化过渡方案

对于许多依赖WordPress的国内站长而言&#xff0c;核心痛点往往不在于WordPress本身的功能或性能——作为全球使用率最高的CMS&#xff0c;其生态成熟度毋庸置疑。真正的挑战来自外部环境&#xff1a;WordPress核心更新、插件商店及主题库的服务器位于海外&#xff0c;频繁遭遇…...

杰理之先开广播再切换SPDIF光纤输入,会打印‘a’,无法播放和广播【篇】

具体参考git链接对应demo修改。...

Wi-Fi模块在IoT与M2M领域的应用与优化

1. Wi-Fi模块在IoT与M2M领域的核心价值Wi-Fi技术作为物联网(IoT)和机器对机器(M2M)通信的基础设施&#xff0c;其重要性不言而喻。根据行业数据&#xff0c;到2025年全球IoT设备数量预计将突破750亿台&#xff0c;其中超过60%的设备将采用Wi-Fi作为主要连接方式。这种广泛采用背…...