C++析构函数详解

目录

如果对你有帮助的话,点个赞吧!

析构函数概念:

析构函数定义:类名前面加上~

注意事项:

关于对象的销毁顺序:


析构函数概念:


在对象销毁的时候会自动调用析构函数,对相关资源进行清理
类似之前C语言中的对malloc进行的free,如果不进行清理就会造成内存泄漏

所以,记住:
构造函数完成的不是创建对象,而是对象的初始化
析构函数完成的不是销毁对象,而是对象的资源清理

析构函数定义:类名前面加上~


~:按位取反符号
1、无参数,为返回类型
2、一个类只能有一个析构函数,如果没有定义,编译器自动生成,同时析构函数不支持重载
3、对象生命周期结束时,编译器系统会自动调用析构函数

注意事项:

既然我们不写,编译器会自动生成析构函数,那么这个自动生成的析构函数调用的时候是不是都会对资源进行清理呢?
也不一定
注意:内置类型不做处理,对自定义类型会调用析构函数
内置类型/基本类型:int/char/double/指针  (语言自己定义的类型) 
自定义类型:struct/class(也就是根据我们的需求而自定义的类型)
默认生成的析构函数,对内置类型不做处理,也就是说根本就不会调用
如果是自定义类型,对自定义类型就会去调用类的析构函数
什么意思?
加入一个类内部的成员变量全都是内置类型,那么就不会调用析构函数
如果是类内部有成员变量是我们自定义的内置类型,就会去调用这个自定义变量类它自己的析构函数
举个例子:
我们声明了一个类A
然后,又声明了一个类B
我们在类B的内部定义了一个类A的变量
那么,此时这个类A就是一个自定义类型,因为它不属于任何一个基本数据类型
所以,此时这个自定义类型A就会去调用这个类A本身内部的析构函数
注意,调用析构函数,本质上是一种资源清理,从这个角度理解也许会更加顺畅一点

关于对象的销毁顺序:


局部变量的生命周期随着函数栈帧的结束而结束
同时,函数栈帧遵循先进后出的原则,即所谓压栈
所以,反而后面建立栈帧的函数最先执行结束,最先销毁
也就是说该函数内的类对象最先调用析构函数
如果使用static修饰变量,就是全局变量
全局变量的生命周期和整个代码运行的周期绑在一起
所以,程序运行到最后才会进行处理
总的来说:销毁顺序遵循后定义先销毁(进栈先后的缘故)
局部变量->局部静态->全局静态+全局静态
也就是说,对于全局对象和静态全局对象是一样的处理

如果对你有帮助的话,点个赞吧!

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

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

相关文章

Tomcat容器经常重启问题排查

报错代码: INFO [Catalina-utility-2] org.apache.catalina.core.StandardContext.reload Reloading Context with name [] has started1.查看内存占用情况:top 可以发现java线程正常情况下占用高达24%的内存资源 2.继续排查:top -Hp 29580 可以发现主要有子线程Catalina-ut…

探索ChatGPT在软件架构师工作中的应用

随着人工智能技术的不断发展,自然语言处理模型如OpenAI的ChatGPT已经成为了解决各种实际问题的强大工具之一。在软件架构师这个领域,ChatGPT也有着广泛的应用。本文将探讨软件架构师如何有效地利用ChatGPT来解决问题和提高工作效率。 ChatGPT简介 Chat…

Java高级编程—注解

文章目录 1.注解的概述2.常见的Annotation示例2.1 生成文档相关的注解2.2 在编译时进行格式检查的注解2.3 跟踪代码依赖性,实现替代配置文件功能的注解 3.自定义Annotation4.JDK中的元注解4.1 Retention4.2 Target4.3 Documented & Inherited 5. JDK8中注解的新…

vue 中的性能优化

1)编码优化 尽量减少data中的数据,data中的数据都会增加getter和setter,会收集对应的watcherv-if和v-for不能连用如果需要使用v-for给每项元素绑定事件时使用事件代理SPA 页面采用keep-alive缓存组件在更多的情况下,使用v-if替代…

服务器出现故障如何恢复数据?

服务器数据恢复案例之服务器raid6中3块硬盘离线导致阵列崩溃的数据恢复案例 服务器故障: 服务器中有一组由6块盘组建的 RAID6,这台网站服务器上运行MYSQL数据库和存放其它类型的文件。该组raid中有两块磁盘离线,管理员没有及时更换磁盘&#…

【Numpy】练习题100道(1-25题)

#学习笔记# 在学习神经网络的过程中发现对numpy的操作不是非常熟悉,遂找到了Numpy 100题。 Git-hub链接 目录 1 题目列表: 2 题解: 1 题目列表: 导入numpy包,并将其命名为np(★☆☆) 打印…

【Flink SQL】Flink SQL 基础概念:数据类型

Flink SQL 基础概念:数据类型 1.原子数据类型1.1 字符串类型1.2 二进制字符串类型1.3 精确数值类型1.4 有损精度数值类型1.5 布尔类型:BOOLEAN1.6 日期、时间类型 2.复合数据类型3.用户自定义数据类型 Flink SQL 内置了很多常见的数据类型,并…

常用的推荐算法

推荐系统在帮助用户发现可能感兴趣的产品、服务或信息方面发挥着重要作用。下面是一些常用的推荐算法: 1. 协同过滤 用户基于协同过滤(User-Based Collaborative Filtering) 基于用户之间的相似性为用户推荐物品。算法会找出与目标用户兴趣…

Spring boot创建第一个项目

作者简介: zoro-1,目前大二,正在学习Java,数据结构,spring等 作者主页: zoro-1的主页 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 Spring boot创建第一个项目 sp…

基于单片机的视觉导航小车设计

目 录 摘 要 I Abstract II 引 言 1 1 总体方案设计 3 1.1 方案论证 3 1.2 项目总体设计 3 2 项目硬件设计 4 2.1 主控模块设计 4 2.1.1单片机选型 4 2.1.2 STM32F103RCT6芯片 4 2.2单片机最小系统电路 5 2.3电机驱动模块设计 7 2.4红外模块设计 8 2.5红外遥控模块设计 9 2.6超…

设计模式深度解析:工厂方法模式与抽象工厂模式的深度对比

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 探索设计模式的魅力:工厂方法模式文章浏览阅读17k次,点赞105次&#xff0…

Axure 单键快捷键 加快绘图速度 提高工作效率

画图类 R:绘制矩形 先点击空白页面,输入R即可绘制 L:绘制直线 先点击空白页面,输入L即可绘制,绘制的时候按住shift直线 O:绘制圆 先点击空白页面,输入O即可绘制,绘制的时候按…

skynet cluster集群笔记

skynet cluster集群笔记 前言cluster相关方法说明集群设计方案:集群中常遇到的问题:注意事项: 前言 skynet 是一个基于事件驱动的分布式游戏服务器框架,支持构建高性能、高并发的网络程序。在 skynet中,集群是指将多个…

最新:Selenium操作已经打开的Chrome(免登录)

最近重新尝试了一下,之前写的博客内容。重新捋了一下思路。 目的就是,selenium在需要登录的网站面前,可能就显得有些乏力,因此是不是有一种东西,可以操作它打开我们之前打开过的网站,这样就不用登录了。 …

FPGA TestBench编写学习

1 timescale 1.1 简介 timescale指令用于指定编译器在处理仿真时的时间单位和时间精度。这个指令通常在模块的顶层声明中使用&#xff0c;它告诉编译器和仿真器如何解释代码中的时间值。 timescale指令的语法如下&#xff1a; timescale <time_unit> <time_precis…

并发通信(网络进程线程)

如果为每个客户端创建一个进程&#xff08;或线程&#xff09;&#xff0c;因为linux系统文件标识符最多1024位&#xff0c;是有限的。 所以使用IO复用技术&#xff0c;提高并发程度。 阻塞与非阻塞 阻塞式复用 非阻塞复用 信号驱动IO 在属主进程&#xff08;线程中声明&…

Acwing.503 借教室(二分)

题目 在大学期间&#xff0c;经常需要租借教室。 大到院系举办活动&#xff0c;小到学习小组自习讨论&#xff0c;都需要向学校申请借教室。 教室的大小功能不同&#xff0c;借教室人的身份不同&#xff0c;借教室的手续也不一样。 面对海量租借教室的信息&#xff0c;我们…

2.4_4 死锁的检测和解除

文章目录 2.4_4 死锁的检测和解除&#xff08;一&#xff09;死锁的检测&#xff08;二&#xff09;死锁的解除 总结 2.4_4 死锁的检测和解除 如果系统中既不采取预防死锁的措施&#xff0c;也不采取避免死锁的措施&#xff0c;系统就很可能发生死锁。在这种情况下&#xff0c;…

sql-mysql可视化工具Workbench导入sql文件

mysql可视化工具Workbench导入sql文件 1、打开workbench2、导入sql文件3、第一行加上库名4、开始运行 1、打开workbench 2、导入sql文件 3、第一行加上库名 4、开始运行

C++基础语法和概念

基本语法和数据类型 C 是一种高性能的编程语言&#xff0c;允许程序员对内存管理进行精细控制。了解 C 的基本语法和数据类型是学习这门语言的第一步。以下是一些基础概念的详细介绍&#xff1a; 基本语法 程序结构 一个基础的 C 程序通常包括一个或多个头文件引用、一个 m…