1、析构函数的定义
析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,delete会自动调用析构函数后释放内存)
C++当中的析构函数格式如下:

class <类名>
{public:~<类名>();
};
<类名>::~<类名>()
{//函数体
};

2、析构函数的理解
请看下面一个例子:

class myclass
{public:myclass(){cout << "构造函数" << endl;}~myclass(){cout << "析构函数" << endl;}
};int main()
{myclass mc;return 0;
}

输出结果:

构造函数
析构函数
请按任意键继续...

在main主函数当中,如果直接声明一个对象,在声明的时候,直接就调用了类内的构造函数,在主函数结束之前的那一小刻,也自动调用了这个类的析构函数。
再看一段代码:

int main()
{myclass * mc;return 0;
}

输出结果:

请按任意键继续...

在main主函数当中,如果直接声明一个对象指针(只是声明而已),既不自动调用构造函数和析构函数。
但是将main函数改为下面这样:

int main()
{myclass * mc;mc = new myclass();return 0;
}

输出结果:

构造函数
请按任意键继续...

这里不仅声明了一个对象指针,而且new了,这说明给这一对象指针分配一个内存空间,当然这就会调用构造函数了;但是,为什么不自动调用析构函数了?说明C++内部缺少这一机制,C++毫不客气的对你说:“你提醒我给一个对象分配空间,那也得麻烦你提醒我将它释放(delete)。于是便有:

int main()
{myclass * mc;mc = new myclass();delete mc;return 0;
}

输出结果:

构造函数
析构函数
请按任意键继续...

所以,指针在使用new之后需要手动释放资源。在较大型的工程当中,资源的释放很重要,因为涉及的数据量比较多,稍有不慎,就会造成资源的浪费和泄露之类的问题,从现在起你就应该养成把握资源的好习惯。

参考:https://www.cnblogs.com/daoluanxiaozi/archive/2011/12/09/2281796.html

C++笔记——析构函数相关推荐

  1. 【C++学习笔记2】构造函数、析构函数、函数多态、抽象类、函数模板

    这次笔记介绍构造函数.析构函数.函数多态.抽象类.函数模板 一.构造函数 1.在定义对象,构造函数程序将自动执行,他的类型跟类名一致 函数声明最好放在自己的类里面,这样才符合类的封装,也可以像下面一样 ...

  2. C++ 笔记(17)— 类和对象(构造函数、析构函数、拷贝构造函数)

    1. 构造函数 构造函数是一种特殊的函数(方法),在根据类创建对象时被调用.构造函数是一种随着对象创建而自动被调用的函数,它的主要用途是为对象作初始化. 构造函数的名称与类的名称是完全相同的,并且不会 ...

  3. 提高C++性能的编程技术笔记:构造函数和析构函数+测试代码

    对象的创建和销毁往往会造成性能的损失.在继承层次中,对象的创建将引起其先辈的创建.对象的销毁也是如此.其次,对象相关的开销与对象本身的派生链的长度和复杂性相关.所创建的对象(以及其后销毁的对象)的数量 ...

  4. (原创)c#学习笔记08--面向对象编程简介01--面向对象编程的含义03--对象的生命周期--构造函数和析构函数...

    8.1.3  对象的生命周期 每个对象都有一个明确定义的生命周期,除了"正在使用"的正常状态之外,还有两个重要的阶段: 构造阶段: 对象最初进行实例化的时期.这个初始化过程称为构造 ...

  5. C++ Primer 5th笔记(chap 18 大型程序工具) 多重继承之构造函数、析构函数

    1. 继承的构造函数与多重继承 如果从多个基类中继承了相同的构造函数(即形参列表完全相同),则程序将产生错误 struct Basel {Basel () = default;Basel (const ...

  6. C++ Primer 5th笔记(chap 13 拷贝控制)析构函数

    1. 特征 类的一个成员函数 名字由波浪号接类名构成 没有返回值 不接受参数 不能被重载,对于一个给定的类,只会有一个析构函数 class Foo{public:~Foo(); } 2. 析构函数的几 ...

  7. 【黑马程序员 C++教程从0到1入门编程】【笔记4】C++核心编程(类和对象——封装、权限、对象的初始化和清理、构造函数、析构函数、深拷贝、浅拷贝、初始化列表、友元friend、运算符重载)

    黑马程序员C++教程 文章目录 4 类和对象(类属性[成员属性],类函数[成员函数]) 4.1 封装 4.1.1 封装的意义(三种权限:public公共.protected保护.private私有)( ...

  8. c++学习笔记之析构函数

    析构函数的两大功能: (1)释放内存 (2)回光返照 注意析构函数的执行顺序:类似于栈后进先出. 运行本程序可以验证num输出的是后输入学生的学号 #include<string> #in ...

  9. Objective-C学习笔记---构造函数和析构函数

    简单的讲,构造函数就是在创建一个对象的时候起到初始化的作用,对这个对象里的一些成员变量进行初始化,析构函数就是在对象被删除进行一些清理工作,也就是专门的扫尾工作,下面用代码来进行具体说明. 一.构造函 ...

最新文章

  1. c语言程序设计现代方法快速排序,C语言实现快速排序改进版
  2. vue实现上下滑动翻页_vue 实现滚动到底部翻页效果(pc端)
  3. 基于网络索引树的异常轨迹检测算法
  4. Object-C非正式协议与正式协议的区别
  5. Mysql 扩展性设计之数据切分、那么数据切分后会带来哪些问题呢?比如分布式事务、数据的一致性、垂直切分和水平切分应用场景
  6. R语言中读取xlsx文件的方法
  7. 压缩软件能否加上忽略某些目录的功能
  8. java webview事件_捕获“页面已完成加载”事件,并使用xwalk Webview在ionic / cordova MainActivity.java中进行操作...
  9. Webstorm配置less
  10. 包含太多_股票开户必备知识,股票交易费包含哪些?
  11. PowerBI开发 第三篇:报表设计技巧
  12. 超级计算机阿波罗11,阿波罗11号制导计算机中指令模块和登月模块原始代码已在 GitHub 上开源...
  13. 【Vue】高级系列(五)Vue模块化实战-demo2-任务清单todoList
  14. cordova获取手机IMEI
  15. 从零搭建开发脚手架 Spring Boot集成Mybatis-plus之一
  16. 转载:在阿里工作四个月经历的总结
  17. 厦门大学2022年计算机考研复试流程
  18. Linux系统配置及服务管理_第07章_存储管理2
  19. opencv的基本数据类型CvPoint,CvSize,CvRect和CvScalar
  20. 科技的成就(二十九)

热门文章

  1. CentOS7.5下搭建zabbix3.4监控
  2. NiFi 脚本执行器使用指南 (part 3)
  3. spring +springmvc+mybatis组合web.xml文件配置
  4. django学习笔记之forloop
  5. 实现pxe的自动化安装
  6. 网络管理员的爱情,不解释...
  7. linux命令补遗 - 4
  8. ASP.NET夜话之21:asp.net网站的性能优化
  9. mysql boost 5.7.21_mysql 5.7.21 安装配置方法图文教程(window)
  10. JMX的Hello World