c++析构函数

析构函数的简述 

1. 析构函数和构造函数类似,是c++规定当对象的生命周期结束时,默认你会调用析构函数。

 2. 同理,当我们不写析构函数的时候编译器会自动生成一个空实现的析构函数

 3. 析构函数只能编译器自己调用,我们不能调用。(无论是不是自己写的)

    

析构函数的作用 

我们在析构函数中主要是在对象的生命周期结束时,释放一些内存(例如堆区的内存)。 当然,如果没有内存需要释放,那就可以写一个空实现的,或者不需要写(编译器会加一个)。

析构函数语法 

class Human {
public:Human();~Human();
private:int age;char* name;
};Human::Human() {age = 18;name = new char;
}Human::~Human() {delete name;
}

注意:  1. 析构函数不能有参数,也就说明析构函数只能有一个不能进行函数重载 

          2. 析构函数是在默认构造函数前面加一个~ 

          3. 代码中类内有两个成员变量  --  age 和 name,age是局部变量其生命周期由编译器管理,而name是一个指针,我们为它在堆区开辟了内存,所以需要在对象生命周期结束的时候,释放掉。(这就在析构函数中实现了) 

         4. 对于上面的代码,如果只有age吗,那析构函数就可以写成一个空实现 

析构函数调用时机 

class Human {
public:Human();~Human();
private:int age;char* name;
};Human::Human() {age = 18;name = new char;cout << __FUNCTION__ << endl;
}Human::~Human() {delete name;cout << __FUNCTION__ << endl;
}void test() {Human man;
}int main(void) {test();system("pause");return 0;
}

 1. 在创建对象的时候,会调用构造函数,对象声明周期结束,调用析构函数-- 使用代码来验证。 

 2. __FUNCTION__是一个宏,使用在函数中表示,此函数的名字。 

 3. 对象也是变量,代码中man对象的生命周期为定义-->test函数结束。

结果:  

 可以看出,先调用构造创建,再调用析构结束

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

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

相关文章

抵御爬虫的前线护盾:深度解读验证码技术的演变历程

一.前言 在当今信息技术迅速发展的背景下&#xff0c;网站和在线服务面临着日益增长的自动化访问威胁&#xff0c;这些大多来自于各类爬虫程序。这种大量的自动化访问不仅对网站的正常运行构成压力&#xff0c;还可能导致敏感数据的泄露&#xff0c;甚至被用于不正当竞争和恶意…

【Docker】Linux中Docker技术入门与实战及实用的常规命令

目录 一、引言 1. 说明&#xff1a; 2. Linux介绍 3. Docker简介 二、Docker三要素 1. 镜像&#xff08;Image&#xff09; 2. 容器&#xff08;Container&#xff09; 3. 仓库&#xff08;Repository&#xff09; 三、实现案例 1. 创建 2. 设置镜像 3. 开启设置 …

求幸存数之和 - 华为OD统一考试

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 给一个正整数列nums,一个跳数jump,及幸存数量left。运算过程为:从索引为0的位置开始向后跳,中间跳过 J 个数字,命中索引为 J+1 的数字,该数被敲出,并从该点起跳,以此类推,直到幸存left个数为止。…

大数据开发工程师需要具备哪些技能?

在回答这个问题之前&#xff0c;需要充分了解一下当前大数据的几个就业方向&#xff0c;可以参考下主流互联网行业的部门架构、职责和JD&#xff0c;大数据开发工程师&#xff0c;总体来说有这么几类&#xff0c;不同的公司叫法不一样&#xff1a; 1、数仓开发工程师 2、算法挖…

Java快速排序希尔排序归并排序

快速排序算法 快速排序的原理&#xff1a;选择一个关键值作为基准值。比基准值小的都在左边序列&#xff08;一般是无序的&#xff09;&#xff0c;比基准值大的都在右边&#xff08;一般是无序的&#xff09;。一般选择序列的第一个元素。 一次循环&#xff1a;从后往前比较&…

Redis:原理速成+项目实战——Redis实战10(Redis消息队列实现异步秒杀)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;Redis&#xff1a;原理速成项目实战——Redis实战9&#xff08;秒杀优化&#xff09; &#x1f4da;订阅专栏&#xff1a;Redis&…

从零学Java 集合概述

Java 集合概述 文章目录 Java 集合概述1 什么是集合?2 Collection体系集合2.1 Collection父接口2.1.1 常用方法2.1.2 Iterator 接口 1 什么是集合? 概念&#xff1a;对象的容器&#xff0c;定义了对多个对象进行操作的常用方法&#xff1b;可实现数组的功能。 和数组区别&…

MES系统数据采集的几种方式

生产制造执行MES系统具有能够帮助企业实现生产数据收集与分析、生产计划管理、生产过程监控等的功能板块&#xff0c;在这里小编就不一一介绍了&#xff0c;主要讲讲它的数据采集功能板块&#xff0c;可以说&#xff0c;数据采集是该系统进行数据统计与生产管理等后续工作的基础…

ELF文件格式以及交叉编译工具链常用工具

windows下的可执行文件是.exe文件. .data段放置的是初始化的全局变量和初始化的静态局部变量&#xff1b; .bss段放置的是未初始化的全局变量和未初始化的静态局部变量&#xff1b;因为未初始化的变量会放在.bss段中统一置0. .text段放语句&#xff0c;比如a; 局部变量则是…

uniapp打包h5部署到服务器

在学习uniapp&#xff0c;部署前后端分离项目。将h5的dist文件打包好后一直在考虑如何通过nginx反向代理到后端接口&#xff0c;整了半天也没整成。最后才发现&#xff0c;uniapp打包的h5页面包好像不需要反向代理到后端接口&#xff0c;只需要通过nginx将dist下的h5包代理了&a…

掌握Sketch:软件介绍与实用技巧分享

Sketch是最好的UI软件之一。它可以快速交互迭代&#xff0c;每个页面之间的小部件可以直接复制粘贴并修改。在整体架构布局中&#xff0c;可以直接下载很多Mocaup模板&#xff0c;所以非常快。这个工具完全是为应用程序设计的&#xff0c;比PS好得多。 如果你不知道sketch软件…

谷粒学院项目redirect_uri 参数错误微信二维码登录

谷粒学院项目redirect_uri 参数错误_redirect_uri": "http%3a%2f%2fguli.shop%2fapi%2fuce-CSDN博客 修改本地配置 # &#xfffd;&#xfffd;&#xfffd;&#xfffd;˿&#xfffd; server.port8160 # &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#x…