析构函数

  • 构造函数(Constructor)在对象创建时执行,提供了初始化
    对象的一种简便手段
  • 析构函数(Destructor)在对象被撤销时(前)执行,用于完
    成对象被撤销前的一些清理工作
  • 具体地说,析构函数往往用于释放“资源”,如在构造函数中动态申请的内存空间,也可以被用来执行“用户希望在最后一次使用对象之后所执行的任何操作”,例如输出有关信息等

对象存储空间

问题

若一个类声明了五个对象,存储空间如何分配?

  • 是否对象中的数据成员和函数成员都占用存储空间
  • 正常思考5个对象占用存储空间应该如下所示

实际

实际上5个对象的数据成员分配存储空间

  • 5个对象的函数成员共用一个存储空间
  • 具体存储结构如下图所示:

例子

假如日期类声明了一个对象 Date mybirthday;

  • cout << sizeof(mybirthday) << endl;

  • cout << sizeof(Date) << endl;
    输出结果都是12

  • 这说明每个对象中的数据成员分配了存储空间

  • 所有对象中的函数成员共用一个存储空间,在代码区存放

析构函数的定义

析构函数语法格式为:

<类名>:: ~<类名>()
{<函数体>
}

注意事项:

  • 函数名是:类名前面加“ ~ ”符号
  • 析构函数不得返回任何值
  • 析构函数不得带有任何参数
  • 其主要功能是在撤销对象之前进行一些善后处理工作
  • 由系统自动调用

日期类中增加析构函数

#include<iostream>
using namespace std;
class Date
{ int year,month,day;public:Date():year(1900),month(1),day(1) { } //无参构造函数Date(int yy,int mm = 1,int dd = 1); //默认参数构造函数Date(Date &d):year(d.year),month(d.month),day(d.day){};//日期对象参数构造函数Date(char *ps); //字符串日期构造函数void print_ymd();~Date() { }; //析构函数定义//由于析构函数是空函数(函数体中没有一条语句),没有感觉到析构函数被自动运行// ~Date(){cout << “撤销日期对象\n”;};
};

计算机程序设计c++ 10-2:析构函数相关推荐

  1. 【编程实践】第一章 C++入门 《C++程序设计语言》 / By 禅与计算机程序设计艺术ChatGPT

    目录 <C++程序设计语言> / By 禅与计算机程序设计艺术&ChatGPT 内容简介 第一章 C++入门 1.1 C++的起源和发展 1.1.1 C++的历史和背景 1.1.2 ...

  2. 算法鼻祖高德纳,82 岁仍在写《计算机程序设计的艺术》

    作者 | 年素清 编辑 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 高德纳(Donald Ervin Knuth)被誉为现代计算机科学的鼻祖,毕生致力于编译程序.属性文法和运算法则等领域 ...

  3. 计算机界最大“追书坑”,82岁大神高德纳仍在写《计算机程序设计艺术》4B卷...

    本文经AI新媒体量子位(ID:QbitAI)授权转载,转载请联系出处 晓查 编译整理 Donald Knuth,中文名高德纳,是他创造了"算法分析"这一新的计算机科学研究领域. 对 ...

  4. 计算机程序c复杂,《计算机程序设计(C语言)》见面课答案

    <计算机程序设计(C语言)>见面课及答案 见面课:模块化程序设计方法 1.下面的描述,哪一个不符合模块化程序设计的特点( ) A.程序设计的复杂性提高了 B.提高了代码的重用性 C.易于维 ...

  5. 湖南省第八届大学生计算机程序设计竞赛1115: 最短的名字(模拟)

    1115: 最短的名字 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 739  Solved: 292 [Submit][Status][Web Boa ...

  6. 计算机与程序设计语言教案,计算机程序设计(c语言)教案

    计算机程序设计(c语言)教案 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.90 积分 计算机程序设计(C语言)教案课程名称计算机程序设计总学 ...

  7. ASP.NET应用程序设计的10大技巧

    ASP.NET应用程序设计的10大技巧 [ ASP.NET应用程序设计的10大技巧 | 责任编辑: 51欢乐吧 - 关涛 | 2007-09-25 10:38:16 ] 调整字体大小: 大 | 中 | ...

  8. 计算机程序设计语言教案,计算机程序设计(C语言)教案.doc

    计算机程序设计(C语言)教案 课程 名称 计算机 程序设计 总学时 80 课题 数据类型.运算符与表达式 第 11~15 学时 课型 必修 教学目标及重点难点 目标:熟练掌握C语言中常见数据类型的表示 ...

  9. 宁波医院计算机试题及答案,(宁波市第25届小学生计算机程序设计竞赛试题及答案.doc...

    (宁波市第25届小学生计算机程序设计竞赛试题及答案 宁波市第25届中小学生程序设计竞赛组初赛试题 1.在宁波市中小学生程序设计比赛复赛(上机编程)时,以下不能使用的编程语言是: (A)Turbo Pa ...

  10. 《计算机程序设计艺术》pdf

    下载地址:网盘下载 内容简介 编辑 本书作者D. E. Knuth是在计算机学界十分著名的学者,在本领域享有很高权威和盛名,他的这部著作是无数计算机专业人员的学习教材和参考读物,也是许多专业研究工作者 ...

最新文章

  1. 【Groovy】字符串 ( 字符串拼接 | 多行字符串 )
  2. 2.3.9 读者-写者问题
  3. 2019 年如何在 CentOS 7 上安装最新版 Nginx
  4. java中队列的类是什么意思_java中LinkedList集合类实现栈和队列要注意什么?
  5. MySql 存储过程实例(附完整注释)
  6. .Net Core3.0 配置Configuration
  7. 方阵和的行列式、方阵行列式的和
  8. CSS3 新怎的伪类选择器
  9. windows使用命令或批处理文件打开远程桌面
  10. 安装FlexPro和设置FlexPro许可证管理器
  11. 软件测试工程师的日常工作流程
  12. ERP系统更改颜色操作步骤
  13. 【未来简史】读书笔记
  14. 记我的 15 款 MacBook Pro 13.3 寸维修(开不了机)+换屏的经历
  15. Vue-第三方库扩展
  16. @click.stop作用(阻止点击事件继续传播,即阻止事件冒泡)
  17. 在html语言中的换行标记是指,南开20春学期(1709、1803、1809、1903、1909、2003)《电子商务网页制作》在线作业题目【标准答案】...
  18. Opencv配置常见问题:
  19. BUCTOJ Contest1001 - 邀请赛20180814 问题 F: Poker
  20. FilenameFilter

热门文章

  1. Java服务器处理图片上传
  2. 为什么RTC晶振频率是32768Hz
  3. win7系统服务器停止,Windows7一个月后停止服务支持 Win7将于明年1月14日终止服务 停止服务后还能使用吗?...
  4. 《Linux驱动:USB设备驱动看这一篇就够了》
  5. html td 跨两个,【单选题】在HTML中,td标签的( )属性用于创建跨多个行的单元格。...
  6. SD卡无法格式化的原因分析
  7. android格式化sd卡软件,如何在各种设备中把SD卡格式化?附误格式化数据恢复方法!...
  8. CodeCraft-20 (Div. 2) E. Team Building(状压dp)
  9. namecheap域名解析
  10. 第十八届全国大学生智能车竞赛竞速比赛规则(讨论版)