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

CD32.【C++ Dev】类和对象(22) 内存管理(下)

目录1.定位new表达式作用格式代码示例分析2.malloc/free和new/delete的区别记忆方法Myclass* ptr (Myclass*)malloc(sizeof(Myclass)); if (ptr nullptr) {...}free(ptr) ptr nullptr;Myclass* ptr new Myclass;delete ptr3.内存泄漏内存泄漏分类Windows下内存泄漏检测方案Linux下内存泄漏检测工具: ValgrindValgrind的检测工具集内存泄漏测试工具内存泄露检测工具比较承接CD31.【C Dev】类和对象(21) 内存管理(中)文章1.定位new表达式作用对已分配的空间显式调用构造函数格式//注:place_address必须是一个type*的指针initializer-list是初始化列表 new (place_address) type//默认构造 //或者 new (place_address) type(initializer-list)代码示例#include iostream using namespace std; typedef int DataType; class Myclass { public: Myclass(int) :_val1(0xFF) ,_val2(2) ,_val3(3.14) { cout Myclass(int) endl; } ~Myclass() { cout ~Myclass endl; _val1 0; _val2 \0; _val3 0; } int _val1; char _val2; float _val3; }; int main() { Myclass* ptr (Myclass*)malloc(sizeof(Myclass)); new(ptr)Myclass(0); ptr-~Myclass(); ptr nullptr;//手动为ptr置空 return 0; }分析ptr指向已经开辟好的空间(暂时不是一个对象),而new(ptr)Myclass(0);对ptr指向已有的空间显式调用构造函数Myclass(0),这里由于定义中Myclass(int)需要传参,这里随便传一个参数0new(ptr)Myclass(0)执行后:​注:ptr是内置类型(任何类型的指针都是内置类型),不会自动调用析构函数ptr-~Myclass()为手动调用析构函数:ptr指向这个对象,则可以使用ptr调用这个对象的公共成员函数​ptr nullptr手动为ptr置空:​定位new表达式在实际中一般是配合内存池使用,因为内存池分配出的内存没有初始化,所以如果是自定义类型的对象,需要使用new的定义表达式进行显示调构造函数进行初始化注意: 内存池的核心思想是程序在启动或某个阶段,一次性向操作系统申请一大块内存(称为“池子”),然后程序自己管理和维护这块内存,当程序中的其他部分需要小的内存块时,不是直接向操作系统申请,而是向这个“池子”申请,当使用完毕释放时,内存也归还给“池子”,而不是操作系统2.malloc/free和new/delete的区别相同点:都是从堆上申请空间,并且需要用户手动释放不同点:1. malloc和free是函数new和delete是操作符2. malloc申请的空间不会初始化,new可以初始化3. malloc申请空间时,需要手动计算空间大小并传递.new只需在其后跟上空间的类型即可,如果是多个对象,[]中指定对象个数即可4. malloc的返回值为void*,在使用时必须强转,new不需要,因为new后跟的是空间的类型5. malloc申请空间失败时,返回的是NULL,因此使用时必须判空,new不需要,但是new需要捕获异常6. 申请自定义类型对象时,malloc/free只会开辟空间,不会调用构造函数与析构函数,而new在申请空间后会调用构造函数完成对象的初始化,delete在释放空间前会调用析构函数完成空间中资源的清理记忆方法从代码上记忆:Myclass* ptr (Myclass*)malloc(sizeof(Myclass)); if (ptr nullptr) { perror(malloc fail); return -1; } free(ptr); ptr nullptr; try { Myclass* ptr new Myclass; delete ptr; ptr nullptr; } catch (const exception e) { cout e.what() endl; }Myclass* ptr (Myclass*)malloc(sizeof(Myclass)); if (ptr nullptr) {...}malloc是函数,( )中要放参数,大小为字节(第1点)sizeof(Myclass): 手动计算空间大小并传递给malloc(第3点)(Myclass*): malloc的返回值为void*,在使用时必须强转(第4点)if (ptr nullptr) {...}: malloc申请空间失败时,返回的是NULL,因此使用时必须判空(第5点)malloc只会开辟空间,不会调用构造函数(第6点)free(ptr) ptr nullptr;free只会释放空间,不会调用析构函数,结束后需要手动置空(第6点)Myclass* ptr new Myclass;new是操作符,不必像malloc函那样写括号(第1点)new Myclass或new Myclass[?]:new只需在其后跟上空间的类型即可,如果是多个对象,[]中指定对象个数即可(第3点)new等价为operato new和构造函数(先申请空间再构造): new可以初始化(第2点) ew在申请空间后会调用构造函数完成对象的初始化)(第6点)try { } catch (...) { }: new不需要,但是new需要捕获异常(第5点)delete ptrdelete在释放空间前会调用析构函数完成空间中资源的清理(第6点)3.内存泄漏之前在71.【C语言】动态内存管理(重点)(4)文章中提到过,补一些其他部分内存泄漏分类堆内存泄漏和系统资源泄漏Windows下内存泄漏检测方案https://thatonegamedev.com/cpp/memory-profiling-on-windows-for-c/Linux下内存泄漏检测工具: Valgrind安装Valgrind的命令:sudo apt install valgrind使用Valgrind运行C/C程序:#使用memcheck工具集 valgrind --toolmemcheck --leak-checkfull 程序路径注: --leak-checkfull表示开启完整泄漏检查例如运行以下内存泄漏代码,g编译器必须加上-g选项#include iostream int main() { int* ptr new int; return 0; }运行结果:其实Valgrind的作用不仅仅在检测内存泄漏的问题,详见百度百科https://baike.baidu.com/item/valgrind/3774370Valgrind的检测工具集Memcheck检测内存泄漏、越界、未初始化变量等valgrind --toolmemcheck ./myprogCallgrind分析函数调用和 CPU 指令数valgrind --toolcallgrind ./myprogCachegrind分析缓存命中率valgrind --toolcachegrind ./myprogHelgrind检测多线程数据竞争valgrind --toolhelgrind ./myprogMassif分析堆内存使用valgrind --toolmassif ./myprog内存泄漏测试工具来源:https://www.52pojie.cn/thread-997085-1-1.html微软官方出品的Notmyfault软件,是Windows系统内核内存泄漏的工具下载地址:https://pan.baidu.com/s/1R6qJfwOyJ2cjZozrw-Filg?pwd9iak提取码: 9iak​(可以指定内存泄漏的速度)内存泄露检测工具比较https://www.cnblogs.com/liangxiaofeng/p/4318499.html

相关文章:

CD32.【C++ Dev】类和对象(22) 内存管理(下)

目录 1.定位new表达式 作用 格式 代码示例 分析 2.malloc/free和new/delete的区别 记忆方法 Myclass* ptr (Myclass*)malloc(sizeof(Myclass)); if (ptr nullptr) {...} free(ptr) ptr nullptr; Myclass* ptr new Myclass; delete ptr 3.内存泄漏 内存泄漏分…...

62:AI多语言神谕生成:文本生成模型与TTS语音合成基础

作者: HOS(安全风信子) 日期: 2026-03-16 主要来源平台: GitHub 摘要: 在《死亡笔记》中,基拉需要以神谕的形式向世界传达正义的旨意。本文探讨如何利用AI技术实现多语言神谕生成,结合文本生成模型与TTS语音…...

ESP32以太网运行时配置库:支持W5500/ENC28J60与Web门户

1. 项目概述ESP32_SC_Ethernet_Manager 是一款专为 ESP32-S2、ESP32-S3 和 ESP32-C3 系列微控制器设计的以太网连接与凭证管理库。其核心目标是解决嵌入式设备在部署后,因网络环境变更(如 IP 地址段调整、DNS 服务器更换、网关迁移)或设备物理…...

libopencm3多平台支持解析:STM32、GD32、LPC和SAM系列微控制器的统一开发框架

libopencm3多平台支持解析:STM32、GD32、LPC和SAM系列微控制器的统一开发框架 【免费下载链接】libopencm3 Open source ARM Cortex-M microcontroller library 项目地址: https://gitcode.com/gh_mirrors/li/libopencm3 libopencm3是一个开源ARM Cortex-M微…...

weixin252基于微信小程序的网约巴士订票平台的设计与实现ssm(文档+源码)_kaic

系统的实现5.1用户信息管理如图5.1显示的就是用户信息管理页面,此页面提供给管理员的功能有:用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息,还进行了对用户名称的模糊查询性别类型查询的条件图5.1 用户信息管…...

铁路关键部件缺陷检测数据集全览(涵盖吊弦病害、绝缘子缺陷、螺栓松动与轨道裂缝)

1. 铁路关键部件缺陷检测数据集概述 铁路作为国家重要的交通基础设施,其安全运行直接关系到乘客生命财产安全。近年来,随着计算机视觉技术的快速发展,基于深度学习的铁路关键部件缺陷检测方法逐渐成为研究热点。而要训练出高精度的检测模型&a…...

@Autowired 和 @Resource的区别

在 Spring 框架中, Autowired 和 Resource 都是⽤于依赖注⼊(DI)的注解,但它们的来源、注⼊逻辑和使⽤场景存在明显差异。以下是两者的核⼼区别:Autowired 属于 Spring 框架原⽣注解,位于 org.springfr…...

Qwen3.5-35B-A3B-AWQ-4bit图文理解能力展示:手写公式识别、表格数据提取、Logo溯源

Qwen3.5-35B-A3B-AWQ-4bit图文理解能力展示:手写公式识别、表格数据提取、Logo溯源 1. 模型能力概览 Qwen3.5-35B-A3B-AWQ-4bit是一款专为视觉多模态理解设计的量化模型,在保持高效推理的同时,展现出强大的图片内容理解能力。这个模型特别适…...

嵌入式低功耗唤醒定时器库WakeUp设计与实现

1. WakeUp 库概述:面向低功耗嵌入式系统的深度睡眠唤醒定时器实现WakeUp 是一个专为资源受限型 Cortex-M0/M0 微控制器设计的轻量级、可移植的唤醒定时器(Wake-up Timer)软件库,核心目标是在系统进入深度睡眠(DeepSlee…...

前后端交互实战:从零搭建登录系统

1. 登录系统基础架构设计 登录系统是每个Web应用的基石,就像小区门禁系统一样,既要保证合法用户顺利通行,又要拦截非法访问。我们先来看一个典型的登录流程:用户在表单输入账号密码 -> 前端校验数据格式 -> 后端验证凭证 -&…...

I型NPC三电平VSG控制:高输出波形质量与电压电流双闭环的SPWM调制

基于I型NPC三电平的VSG(虚拟同步机)控制,具有较高的输出波形质量,采用中点电位平衡控制,SPWM调制,电压电流双闭环控制。 1.I型NPC三电平VSG控制 2.电压电流双闭环,SPWM 3.提供相关参考文献 支持…...

从Spring_couplet_generation看AI内容生成的安全与伦理考量

从Spring_couplet_generation看AI内容生成的安全与伦理考量 最近在部署和试用一些AI内容生成模型,比如能写对联的Spring_couplet_generation,感觉挺有意思的。它能根据几个关键词,瞬间生成一副对仗工整、寓意吉祥的对联,省去了不…...

Express-GraphQL测试策略终极指南:单元测试与集成测试最佳实践

Express-GraphQL测试策略终极指南:单元测试与集成测试最佳实践 【免费下载链接】express-graphql Create a GraphQL HTTP server with Express. 项目地址: https://gitcode.com/gh_mirrors/ex/express-graphql Express-GraphQL是一款用于创建GraphQL HTTP服务…...

Comsol无量纲拓扑优化:探索结构优化新境界

comsol无量纲拓扑优化。在工程领域,拓扑优化就像是一把神奇的钥匙,能解锁材料分布的最优解,让结构在满足各种约束条件下发挥最大性能。而Comsol作为一款强大的多物理场仿真软件,在拓扑优化方面有着独特的魅力,尤其是无…...

FortuneSheet数据验证与条件格式化的终极教程

FortuneSheet数据验证与条件格式化的终极教程 【免费下载链接】fortune-sheet A drop-in javascript spreadsheet library that provides rich features like Excel and Google Sheets 项目地址: https://gitcode.com/gh_mirrors/fo/fortune-sheet FortuneSheet是一款功…...

Javashop商城系统深度评测:为何它能成为企业级电商的首选方案?

1. 为什么企业级电商需要Javashop? 第一次接触Javashop是在去年帮一家连锁超市做线上商城改造时。当时他们原有的系统在大促期间频繁崩溃,技术团队疲于应付各种突发问题。经过多方对比测试,最终选择了Javashop,结果上线后的第一个…...

GitHub仓库的创建与git的连接使用

补充上面git指令:如何撤销修改:git restore -- b.txt 注意空格一:首先注册github账号,登录页面显示如下:二:点击右上角加号,点击第一个创建仓库存储。新建文件点击public公共三:简单…...

突破9大兼容性限制:WarcraftHelper如何让魔兽争霸3重获新生

突破9大兼容性限制:WarcraftHelper如何让魔兽争霸3重获新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是一款专注于解…...

Neorg性能优化终极指南:10个技巧让组织效率翻倍

Neorg性能优化终极指南:10个技巧让组织效率翻倍 【免费下载链接】neorg Modernity meets insane extensibility. The future of organizing your life in Neovim. 项目地址: https://gitcode.com/gh_mirrors/ne/neorg Neorg作为一款基于Neovim的现代化笔记管…...

OBS项目架构分析:理解大型C++多媒体应用的设计模式

OBS项目架构分析:理解大型C多媒体应用的设计模式 【免费下载链接】OBS Open Broadcaster Software (Deprecated: See OBS Studio repository instead) 项目地址: https://gitcode.com/gh_mirrors/ob/OBS Open Broadcaster Software(OBS&#xff0…...

Python数据分析新手必看:pandas一行代码计算平均值偏差的3种姿势

Python数据分析新手必看:pandas一行代码计算平均值偏差的3种姿势 当你第一次接触数据分析时,可能会被各种统计指标搞得晕头转向。平均值、中位数、标准差...这些术语听起来就让人头疼。但今天我们要聊的这个指标——平均值偏差(Mean Absolute…...

MCP采样接口调用流深度解构(金融级灰度发布场景实录)

第一章:MCP采样接口调用流的金融级灰度发布全景图在高可用、强一致性的金融级系统中,MCP(Metric-Control-Proxy)采样接口的灰度发布并非简单的流量切分,而是一套融合服务治理、链路染色、动态采样率调控与实时可观测性…...

为什么选择picoGPT:10个理由让你爱上这个极简AI模型实现

为什么选择picoGPT:10个理由让你爱上这个极简AI模型实现 【免费下载链接】picoGPT An unnecessarily tiny implementation of GPT-2 in NumPy. 项目地址: https://gitcode.com/gh_mirrors/pi/picoGPT 在当今AI模型日益复杂、框架庞大的时代,picoG…...

终极指南:Feast增量物化如何高效更新特征数据

终极指南:Feast增量物化如何高效更新特征数据 【免费下载链接】feast Feature Store for Machine Learning 项目地址: https://gitcode.com/GitHub_Trending/fe/feast Feast作为一款强大的机器学习特征存储工具,其增量物化功能能够帮助数据科学家…...

5个高效协作技巧:用SurfSense实时编辑与评论功能提升团队效率

5个高效协作技巧:用SurfSense实时编辑与评论功能提升团队效率 【免费下载链接】SurfSense Highly Customizable AI Research Agent just like NotebookLM or Perplexity, connected to external sources such as search engines (Tavily), Slack, Notion, and more.…...

【数据驱动】基于深度学习LSTM模型的建筑温控系统(地源热泵 GSHP)预测控制附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...

现在不看就晚了:MCP v2.4 Sampling协议升级倒计时30天!5大兼容性断点+迁移checklist+回滚熔断预案全公开

第一章:MCP v2.4 Sampling协议升级全景概览MCP(Model Control Protocol)v2.4 Sampling 协议是面向大模型服务编排与推理采样控制的关键演进版本,聚焦于动态采样策略调度、跨模型一致性保障及低延迟响应能力提升。本次升级并非简单…...

HoRain云--Coding Plan

🎬 HoRain 云小助手:个人主页 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …...

吃瓜,硅谷500亿独角兽翻车!Cursor “自研”神模型被扒:底层竟是中国 Kimi 套壳,马斯克亲自实锤

我的创业故事:《我的创业故事:87年出生,我开了一家一人公司,年营收百万》大家好,我是微笑哥。这个事情很有意思,也算是中美 AI 大模型的一个历史性转折点,间接的证明了中国大模型公司的实力。提…...

【多微电网】计及碳排放的基于交替方向乘子法(ADMM)的多微网电能交互分布式运行策略研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子…...