C 析构函数

C 析构函数概述

C 析构函数是一个特殊的成员函数,作用与构造函数相反,它的名字是类名的前面加一个~符号,析构函数是与构造函数作用相反的函数,当对象的生命期结束时,会自动执行析构函数。

C 执行析构函数的情况

如果在一个函数中定义了一个对象,当这个函数被调用结束时,对象应该释放,在对象释放前自动执行析构函数。static局部对象在函数调用结束时对象并不释放,因此也不调用析构函数,只在main函数结束调用exitt函数结束程序时,才调用static局部对象的析构函数。如果定义了一个全局对象,则在程序的流程离开其作用域时,调用该全局对象的析构函数。

如果用new运算符动态地建立了一个对象,当用delete运算符释放该对象时,先调用该对象的析构函数。 

C 析构函数详解

析构函数的作用并不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作,使这部分内存可以被程序分配给新对象使用。

析构函数不返回任何值,没有函数类型,也没有函数参数,因此不能重载,一个类可以有多个构造函数,但只能有一个析构函数。 

析构函数的作用并不仅限于释放资源方面,它还可以被用来执行程序员希望在最后一次使用对象之后所执行的任何操作。

如果没有定义析构函数,C 编译系统会自动生成一个析构函数,但它只是徒有析构函数的名称和形式,实际上什么都不执行,要想让析构函数执行,必须在定义的析构函数中指定。

案例:C 析构函数案例

#include 
using namespace std;
class Number
{public:void setNumber( double num );double getNumber( void );Number(); // 这是构造函数声明~Number(); // 这是析构函数声明private:float number;
};
// 成员函数定义,包括构造函数
Number::Number(void)
{cout << "我是构造函数" << endl;
}
Number::~Number(void)
{cout << "我是析构函数" << endl;
}void Number::setNumber( double num )
{number = num;
}double Number::getNumber( void )
{return number;
}
// 程序的主函数
int main( )
{Number num;num.setNumber(6.0); // 设置长度cout << "学号是:" << num.getNumber() <<endl;return 0;
}

编译运行结果:

我是构造函数
学号是:6
我是析构函数--------------------------------
Process exited after 2.047 seconds with return value 0
请按任意键继续. . .

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

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

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

相关文章

前后端分离的项目部署到tomcat_前后端分离后,tomcat服务器部署和发布

打包服务端&#xff1a;IDEA打开项目&#xff0c;等待项目初始化完成&#xff0c;点击Build- Build Artifacts&#xff0c;进行打包image.png点击之后会出现下面这个小窗口&#xff0c;选择红框中部分&#xff1a;image.png这个过程就是打包了&#xff0c;等待打包完成之后&…

vue 侦听器侦听对象属性_不删除侦听器–使用ListenerHandles

vue 侦听器侦听对象属性听一个可观察的实例并对它的变化做出React很有趣。 做一些必要的事情来打断或结束这种聆听会变得很有趣。 让我们看看问题的根源和解决方法。 总览 这篇文章将首先讨论这种情况&#xff0c;然后再讨论常见的方法和问题所在。 然后&#xff0c;它将提供解…

华硕笔记本桌面没有显示计算机,华硕笔记本的桌面不见了,急求高手解答

满意答案下放工人2013.04.06采纳率&#xff1a;54% 等级&#xff1a;12已帮助&#xff1a;5701人★桌面&#xff0d;点击鼠标右键&#xff0d;点击排列图标&#xff0d;点击显示桌面图标★在桌面上右键点击→“属性”→桌面项→左下有个“自定义桌面”进入设置&#xff0c;把…

Facebook开源 C++11 组件库,真香!

Folly是Facebook open source library的缩写&#xff0c;提供了类似 Boost 和 std 库的功能。包括散列、字符串、向量、内存分配、位处理等&#xff0c;满足大规模高性能的需求。逻辑设计Folly 是一组相对独立的组件&#xff0c;有的简单到几个符号。对内部依赖没有限制&#x…

sentinel接入网关应用_接入容器服务Kubernetes版应用

server:port: 8090# Eurekaeureka:instance:leaseRenewalIntervalInSeconds: 10leaseExpirationDurationInSeconds: 30client:enabled: true #若希望开启Euerka支持&#xff0c;则置为true并将其它服务发现置为false。serviceUrl:defaultZone: http://my-eureka-ack-springclou…

undertow ssl_SSL与WildFly 8和Undertow

undertow ssl我一直在研究WildFly 8的一些安全性主题&#xff0c;偶然发现了一些没有很好记录的配置选项。 其中之一是用于新的Web子系统Undertow的TLS / SSL配置。 有很多关于较旧的Web子系统的文档&#xff0c;并且确实仍然可以使用&#xff0c;但是这里是使用新方法进行配置…

div alert html,基于jQuery的弹出消息插件 DivAlert之旅(一)

想着自己学习Javascript&#xff0c;以及Ajax、jQuery等已经有一段时间了&#xff0c;不过貌似还没有写过一个插件&#xff0c;看到jQuery官网上那么多令人眼前一亮的插件&#xff0c;自己今天也动心说是不是能够写一个类似的插件来瞧瞧&#xff0c;了解了jQuery插件的基本格式…

C++对象的动态建立

C对象的动态建立和释放在C中&#xff0c;如果定义的对象是静态的&#xff0c;在程序运行过程中&#xff0c;对象所占的空间是不能随时释放的。为提高内存空间的利用率&#xff0c;希望在需要用到对象时才建立对象&#xff0c;在不需要用该对象时就撤销它&#xff0c;释放它所占…

java字符连接字符串数组_Java中连接字符串的最佳方法

java字符连接字符串数组最近有人问我这个问题–在Java中使用运算符连接字符串是否对性能不利&#xff1f; 这让我开始思考Java中连接字符串的不同方法&#xff0c;以及它们如何相互对抗。 这些是我要研究的方法&#xff1a; 使用运算符 使用StringBuilder 使用StringBuffer…

微型计算机使用的普通编码是,2017计算机一级考试选择题练习及答案(2)

35、一般计算机硬件系统的主要组成部件有五大部分&#xff0c;下列选项中不属于这五大部分的事( B )A)运算器 B)软件C)输入设备和输出设备 D)控制器36、微型计算机主机的主要组成部分有( A)。A)运算器和控制器B)CPU 和软盘C)CPU 和显示器D)CPU、内存储器和硬盘37、微型计算机硬…

C 构造函数重载

C 用参数初始化表对数据成员初始化在C 中&#xff0c;构造函数的函数可以通过体内赋值语句对数据成员实现初始化&#xff0c;C 还提供另一种初始化数据成员的方法&#xff0c;用参数初始化表来实现对数据成员的初始化。这种方法不在函数体内对数据成员初始化&#xff0c;而是在…

乐播投延迟很高_大屏也要高刷新!华为4K@120智慧屏初体验,屏幕软件都够硬

买电视就是买屏幕&#xff0c;华为智慧屏也不例外。可参数大而全的旗舰产品往往都有着相当高昂的售价&#xff0c;假如你不愿意将就千元级别的画质&#xff0c;希望电视能坚持更长时间&#xff0c;却又没有足以点满所有技能树的预算……华为新出的S系列智慧屏&#xff0c;大概正…

java常见性能优化_十大最常见的Java性能问题

java常见性能优化Java性能是所有Java应用程序开发人员都关心的问题&#xff0c;因为快速使应用程序与使其正常运行同等重要。 史蒂文海恩斯&#xff08;Steven Haines&#xff09;使用他在Java性能问题上的个人经验得出的结论是&#xff0c; 大多数问题都有共同的根本原因 。 因…

为甚 html 显示为源码,显示字符串作为美化HTML源代码

我正在开发一个ASP.NET MVC Web应用程序。在一个页面上&#xff0c;我有一个字符串&#xff0c;如下所示&#xff1a;This is some text !对于预览模式&#xff0c;我使用Html.Raw(Model.MyText)&#xff0c;文本显示为呈现的HTML&#xff1a;此是一些文字&#xff01;我现在想…

C语言 | 链表概述

C语言链表概述链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构&#xff0c;是根据需要开辟内存单元。链表有一个“头指针”变量&#xff0c;它存放一个地址&#xff0c;该地址指向一个元素。链表中每一个元素称为“结点”&#xff0c;每个结点都应包括两个部…

笔记本电脑频繁自动重启_如何解决电脑频繁自动重启

电脑频繁自动重启的原因可能是系统问题&#xff0c;也可能是电脑硬件出现问题&#xff0c;需要经过仔细排查才能找到自动重启的原因。电脑频繁自动重启的原因一、显卡或CPU温度过高当显卡和CPU的温度达到一定温度以后&#xff0c;主板就会启用自动保护功能&#xff0c;使电脑重…

jooq_jOOQ与Hibernate:何时选择哪个

jooqHibernate已成为Java生态系统中的事实上的标准&#xff0c;事实上&#xff0c; 如果标准对您很重要 &#xff0c;并且如果您将JCP与ISO&#xff0c;ANSI&#xff0c;IEEE等置于同一级别&#xff0c;那么Hibernate也是实际的JavaEE标准实现。 本文的目的不是讨论标准&#…

html5编辑器新手用,3款容易上手的HTML5编辑工具推荐~

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我们的生活已经时刻可见H5页面的身影&#xff0c;从美食到用车、从购物到求职&#xff0c;可以说HTML5技术对我们生活的影响是颠覆性的。今天小编就给大家推荐5款容易上手的H5页面&#xff0c;大家可以通过自己制作H5页面来感受一下…

C语言 | 循环语句总结

C语言循环的嵌套一个循环体内又包含另一个完整的循环结构&#xff0c;称为循环的嵌套。内嵌的循环体中还可以嵌套循环&#xff0c;这就是多层循环。3种常用循环语句&#xff1a;while语句、do...while语句和for语句可以相互嵌套。C语言循环的比较3种循环语句都可以用来处理同一…

python 死循环程序能占满cpu吗_运行tensorflow python程序,限制对GPU和CPU的占用操作...

一般情况下&#xff0c;运行tensorflow时&#xff0c;默认会占用可以看见的所有GPU&#xff0c;那么就会导致其它用户或程序无GPU可用&#xff0c;那么就需要限制程序对GPU的占用。并且&#xff0c;一般我们的程序也用不了所有的GPU资源&#xff0c;只是强行霸占着&#xff0c;…