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

C++超详细讲解析构函数

析构函数是特殊的成员函数特征如下析构函数名是~类名无参数无返回值一个类有且只有一个析构函数对象声明周期结束编译器自动调用析构函数12345678910111213141516171819202122232425262728293031classStack{public:Stack(intcapacity 4):_size(0),_capacity(capacity),_p(newint[_capacity]){cout Stack(int capacity 4) endl;}~Stack(){cout ~Stack() endl;if(_p){delete[](_p);_p nullptr;}_size _capacity 0;}private:int_capacity;int_size;int* _p;};intmain(){Stack s;return0;//程序结束调用s的析构函数}输出析构函数处理自定义类型1234567891011121314151617181920212223242526272829303132333435363738394041classString{public:String(constchar* str songxin){cout String(const char* str \songxin\) endl;_str (char*)malloc(strlen(str) 1);strcpy(_str, str);}~String(){cout ~String() endl;free(_str);_str nullptr;}private:char* _str;};classPerson{public:Person():_age(20),_name(){cout Person() endl;}~Person(){cout ~Person() endl;}private:String _name;int_age;};intmain(){Person p;return0;}输出析构函数在程序即将结束时调用了Person的析构函数在Person类的析构函数即将结束接着调用String类的析构函数。归纳一下析构函数是与构造函数执行相反的操作的构造函数负责给对象成员变量初始化并加载资源而析构函数则是给对象的成员变量清理资源而不是清理对象本身。编译器生成的默认析构函数编译器默认生成的析构函数能做些什么工作呢我们前面已经介绍了编译器生成的构造函数会去只会处理自定义类型的成员变量那么析构既然和构造相对应析构也应该是只去处理自定义类型的成员变量吧确实如此析构函数不会对内置类型有任何处理只会在调用自身的析构后再去调用自定义类型成员的析构。关于编译器自动生成的析构函数下面的程序我们会看到编译器生成的析构函数会对自定类型成员调用它的析构函数。1234567891011121314151617181920212223242526272829303132333435363738classString{public:String(constchar* str songxin){cout String(const char* str \songxin\) endl;_str (char*)malloc(strlen(str) 1);strcpy(_str, str);}~String(){cout ~String() endl;free(_str);_str nullptr;}private:char* _str;};classPerson{public:Person():_age(20),_name(){cout Person() endl;}private:String _name;int_age;};intmain(){Person p;return0;}输出默认生成的析构函数对成员变量的处理内置类型不处理自定义类型成员调用相应的析构函数那成员变量中的内置类型处不处理其实都无所谓嘛反正都要归还给操作系统但是有例外如果成员变量含有指针并且指针指向一块我们正使用的空间指针也是内置类型那如果不释放指针指向的那块空间就会造成内存泄漏而编译器生成的析构函数是不会处理此情况的因为需要我们在析构函数中主动释放内存也就是说需要我们显式的去定义析构函数。12345678910111213141516171819202122232425262728293031classStack{public:Stack(intcapacity 4):_size(0),_capacity(capacity),_p(newint[_capacity])//使用new去申请内存{cout Stack(int capacity 4) endl;}~Stack(){cout ~Stack() endl;if(_p){delete[](_p);//释放内存_p nullptr;}_size _capacity 0;}private:int_capacity;int_size;int* _p;};intmain(){Stack s;return0;//程序结束调用s的析构函数}析构函数无论是我们显式定义的还是编译器生成的都会在对象的声明周期结束时自动调用并且会调用自定义类型成员变量的析构函数来释放资源而对内置类型不做处理。可以不显式定义析构函数的情况类的成员都是自定义类型的类的成员都是非指针的内置类型成员有指针但并没有管理内存资源如果类的成员变量有指针类型并且我们让指针指向了一块动态分配的空间那么就需要我们自己写析构函数了。总结不是类直接管理另一块内存资源的就不需要写析构函数编译器自己生成的就能处理。

相关文章:

C++超详细讲解析构函数

析构函数是特殊的成员函数特征如下:析构函数名是~类名;无参数无返回值;一个类有且只有一个析构函数;对象声明周期结束,编译器自动调用析构函数;12345678910111213141516171819202122232425262728293031clas…...

Tina Linux嵌入式开发实战:从系统架构到应用移植全解析

1. 项目概述如果你正在接触全志科技的Tina Linux平台,无论是作为软件开发工程师还是技术支持,面对一个全新的嵌入式Linux SDK,最头疼的莫过于如何快速上手,理清从环境搭建到系统定制的整个脉络。这份指南就是为你准备的。Tina Lin…...

3分钟上手跨平台资源下载神器:轻松获取微信视频号、抖音无水印内容

3分钟上手跨平台资源下载神器:轻松获取微信视频号、抖音无水印内容 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader …...

SAS宏编程中IN运算符的三种实现方法与实战应用

1. 项目概述:从“硬编码”到“智能匹配”的宏编程跃迁在SAS宏编程的世界里,我们常常会遇到一个经典困境:如何优雅地处理一组离散的、但逻辑上同属一个类别的值?比如,你需要根据用户传入的省份名称,执行不同…...

权威深度指南:使用iperf3 Windows版进行网络性能评估与优化实战

权威深度指南:使用iperf3 Windows版进行网络性能评估与优化实战 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds iperf3 Windows版是专业…...

汽车12V电源防护:P6KE TVS二极管选型、设计与实战指南

1. 项目概述:汽车电源线上的“隐形保镖”在汽车电子系统的设计里,12V直流电源线是整车的能量动脉,从蓄电池到ECU(发动机控制单元)、从车身控制器到娱乐系统,几乎所有的电子模块都离不开它。但这条“动脉”所…...

汽车12V电源保护:TVS二极管选型、应用与EMC测试实战

1. 项目概述:为什么汽车12V电源线需要“特种保镖”?在汽车电子系统里,那根看似普通的12V DC电源线,其实是个“压力山大”的角色。它不仅要给车机、仪表、传感器、ECU(电子控制单元)这些“大脑”和“神经”稳…...

基于RK3399核心板的智能PCR仪开发:从嵌入式系统到高精度温控

1. 项目概述:当PCR仪遇上高性能核心板在分子生物学实验室里,PCR仪(聚合酶链式反应仪)是当之无愧的“C位”设备。从基础的病原体检测、基因分型,到前沿的基因编辑、高通量测序文库构建,几乎每一个实验环节都…...

如何快速解决Windows 11区域模拟问题:完整API钩子技术指南

如何快速解决Windows 11区域模拟问题:完整API钩子技术指南 【免费下载链接】Locale_Remulator System Region and Language Simulator. 项目地址: https://gitcode.com/gh_mirrors/lo/Locale_Remulator Locale Remulator是一款强大的系统区域和语言模拟工具&…...

增程式电动汽车预测型能量管理策略【附算法】

✨ 长期致力于增程式电动汽车、能量管理策略、车速预测、广义回归神经网络、动态规划研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)基于AIC准则的自…...

RK3588核心板开发全解析:从8K编解码到NPU AI应用实战

1. 项目概述:当“八核”遇上“8K”,一块核心板能做什么?最近拿到了一块RK3588的核心板套件,这玩意儿在圈子里热度一直不低。RK3588这颗芯片,从发布之初就被贴上了“旗舰”、“全能”的标签,八核CPU、8K编解…...

5G FWA智能终端技术解析:从核心原理到部署实践

1. 项目背景与行业意义最近在圈子里看到一则消息,美格智能的5G FWA智能终端产品成功中标了中国联通的招标项目。这消息乍一看像是普通的商业新闻,但对于我们这些常年泡在通信和物联网领域的人来说,这背后其实藏着不少值得琢磨的门道。它不仅仅…...

5G FWA智能终端技术解析:从核心架构到运营商集采实战

1. 项目概述:一次典型的5G FWA终端集采中标事件最近,业内传来一个挺有意思的消息,美格智能的5G FWA智能终端产品,在中国联通的一个招标项目中成功中标了。对于不熟悉通信行业的朋友来说,这听起来可能就是个普通的商业新…...

18分钟攻破GitHub:TeamPCP供应链攻击全技术解析与防御新范式

摘要 2026年5月18日,威胁组织TeamPCP通过一条精心设计的多级供应链攻击链,仅用18分钟就成功入侵全球最大代码托管平台GitHub的内部系统,窃取了约3800个核心私有仓库,涵盖Copilot、CodeQL、GitHub Actions等所有关键产品的源代码。…...

3000+戴森球计划工厂蓝图终极指南:从新手到大师的完全解决方案

3000戴森球计划工厂蓝图终极指南:从新手到大师的完全解决方案 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints 还在为戴森球计划中复杂的工厂布局而头疼吗&#…...

Microsoft Defender双零日在野利用全解析:从BlueHammer到RedSun的终端沦陷之路

前言 2026年5月20日,微软安全响应中心(MSRC)发布紧急安全公告,承认旗下Microsoft Defender存在两个已被野外利用超过一个月的零日漏洞——CVE-2026-41091与CVE-2026-45498。同日,美国国土安全部下属的网络安全与基础设施安全局(CISA)将这两个…...

5步快速上手ScriptHookV:GTA V模组开发完整指南

5步快速上手ScriptHookV:GTA V模组开发完整指南 【免费下载链接】ScriptHookV An open source hook into GTAV for loading offline mods 项目地址: https://gitcode.com/gh_mirrors/sc/ScriptHookV ScriptHookV是一款专为《侠盗猎车手V》(GTA V&…...

矿山灾害应急回溯:UWB离线即失联,无感定位全程轨迹留存

矿山灾害应急回溯:UWB离线即失联,无感定位全程轨迹留存矿山井下塌方、瓦斯超限、透水、顶板垮落等突发性灾害具备极强不可预判性,灾害发生后极易伴随断电断网、通信中断、组网瘫痪等状况。应急轨迹回溯、人员位置核查、救援路线规划&#xff…...

AR眼镜主板与光机定制:从核心需求到量产落地的硬件开发指南

1. 项目概述:从一块主板到一副眼镜的蜕变最近几年,AR(增强现实)智能眼镜从科幻概念逐渐走进现实,无论是工业巡检、远程协作,还是消费娱乐,都能看到它的身影。但很多人可能不知道,决定…...

泉盛UV-K5/K6对讲机专业级固件定制与功能扩展指南

泉盛UV-K5/K6对讲机专业级固件定制与功能扩展指南 【免费下载链接】uv-k5-firmware-custom 全功能泉盛UV-K5/K6固件 Quansheng UV-K5/K6 Firmware 项目地址: https://gitcode.com/gh_mirrors/uvk5f/uv-k5-firmware-custom 泉盛UV-K5/K6对讲机LOSEHU固件是一款基于多个开…...

AR眼镜主板与光机定制开发:从核心需求到软硬件协同的工程实践

1. 项目概述:从“主板”与“光机”看AR眼镜的核心最近和几个做AR硬件和方案的朋友聊得比较多,大家普遍有个感觉:市面上关于AR眼镜的讨论,要么是概念满天飞,要么是成品评测,但真正深入到硬件底层&#xff0c…...

如何高效下载B站视频:Python开源工具bilibili-downloader完全指南

如何高效下载B站视频:Python开源工具bilibili-downloader完全指南 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader B站视频…...

DMXAPI:国产多模态大模型API聚合平台,让开发者一键调用通义千问等主流模型

在国产大模型百花齐放的今天,如何高效、稳定地接入各类模型能力,成为开发者和企业面临的核心痛点。DMXAPI 应运而生,作为中国多模态大模型API聚合平台,致力于打造"国产模型一站式调用中心",让开发者无需对接…...

大模型应用开发到底在开发什么?

你平时用 ChatGPT、Claude 或者各种 AI 助手的时候,可能觉得这玩意就是"发一句话、拿一个回答"。但你想过没有——那些企业里用的 AI 客服、智能答疑机器人,也是这么简单吗? 其实,大模型应用开发真正做的,不…...

Word到LaTeX的工业级转换:docx2tex深度解析与技术实践

Word到LaTeX的工业级转换:docx2tex深度解析与技术实践 【免费下载链接】docx2tex Converts Microsoft Word docx to LaTeX 项目地址: https://gitcode.com/gh_mirrors/do/docx2tex 在学术出版和技术文档领域,Word与LaTeX之间的格式鸿沟一直是困扰…...

AI赋能百业,从城市治理到智能家居,这些应用场景让你大开眼界!

文章深入探讨了人工智能在各个领域的创新应用,包括城市治理、医疗、金融、教育、交通出行、零售电商、制造、能源、农业、智能家居、娱乐传媒、文化旅游等。通过具体的案例和技术手段,展示了AI如何提升效率、优化决策、改善生活质量。例如,成…...

终极指南:BetterNCM插件管理器一键安装,让网易云音乐焕然新生

终极指南:BetterNCM插件管理器一键安装,让网易云音乐焕然新生 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐功能单一而烦恼?Bett…...

AI大模型学习顺序_七步掌握大模型精髓:从入门到精通的进阶秘籍!

本文以“七层关系”为框架,系统地阐述了学习大模型的最佳路径。从基础概念入手,逐步深入到模型架构、训练技巧、应用场景等核心内容,旨在帮助读者构建完整的知识体系,最终实现从入门到精通的全面提升。按“七层关系”学大模型&…...

零基础构建智能语音助手:小智ESP32后端服务完全指南

零基础构建智能语音助手:小智ESP32后端服务完全指南 【免费下载链接】xiaozhi-esp32-server 本项目为xiaozhi-esp32提供后端服务,帮助您快速搭建ESP32设备控制服务器。Backend service for xiaozhi-esp32, helps you quickly build an ESP32 device cont…...

终极免费指南:如何用Wand-Enhancer深度解锁WeMod完整功能与远程控制

终极免费指南:如何用Wand-Enhancer深度解锁WeMod完整功能与远程控制 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer Wand-Enhancer是一个开源…...