C++笔记——析构函数
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++笔记——析构函数相关推荐
- 【C++学习笔记2】构造函数、析构函数、函数多态、抽象类、函数模板
这次笔记介绍构造函数.析构函数.函数多态.抽象类.函数模板 一.构造函数 1.在定义对象,构造函数程序将自动执行,他的类型跟类名一致 函数声明最好放在自己的类里面,这样才符合类的封装,也可以像下面一样 ...
- C++ 笔记(17)— 类和对象(构造函数、析构函数、拷贝构造函数)
1. 构造函数 构造函数是一种特殊的函数(方法),在根据类创建对象时被调用.构造函数是一种随着对象创建而自动被调用的函数,它的主要用途是为对象作初始化. 构造函数的名称与类的名称是完全相同的,并且不会 ...
- 提高C++性能的编程技术笔记:构造函数和析构函数+测试代码
对象的创建和销毁往往会造成性能的损失.在继承层次中,对象的创建将引起其先辈的创建.对象的销毁也是如此.其次,对象相关的开销与对象本身的派生链的长度和复杂性相关.所创建的对象(以及其后销毁的对象)的数量 ...
- (原创)c#学习笔记08--面向对象编程简介01--面向对象编程的含义03--对象的生命周期--构造函数和析构函数...
8.1.3 对象的生命周期 每个对象都有一个明确定义的生命周期,除了"正在使用"的正常状态之外,还有两个重要的阶段: 构造阶段: 对象最初进行实例化的时期.这个初始化过程称为构造 ...
- C++ Primer 5th笔记(chap 18 大型程序工具) 多重继承之构造函数、析构函数
1. 继承的构造函数与多重继承 如果从多个基类中继承了相同的构造函数(即形参列表完全相同),则程序将产生错误 struct Basel {Basel () = default;Basel (const ...
- C++ Primer 5th笔记(chap 13 拷贝控制)析构函数
1. 特征 类的一个成员函数 名字由波浪号接类名构成 没有返回值 不接受参数 不能被重载,对于一个给定的类,只会有一个析构函数 class Foo{public:~Foo(); } 2. 析构函数的几 ...
- 【黑马程序员 C++教程从0到1入门编程】【笔记4】C++核心编程(类和对象——封装、权限、对象的初始化和清理、构造函数、析构函数、深拷贝、浅拷贝、初始化列表、友元friend、运算符重载)
黑马程序员C++教程 文章目录 4 类和对象(类属性[成员属性],类函数[成员函数]) 4.1 封装 4.1.1 封装的意义(三种权限:public公共.protected保护.private私有)( ...
- c++学习笔记之析构函数
析构函数的两大功能: (1)释放内存 (2)回光返照 注意析构函数的执行顺序:类似于栈后进先出. 运行本程序可以验证num输出的是后输入学生的学号 #include<string> #in ...
- Objective-C学习笔记---构造函数和析构函数
简单的讲,构造函数就是在创建一个对象的时候起到初始化的作用,对这个对象里的一些成员变量进行初始化,析构函数就是在对象被删除进行一些清理工作,也就是专门的扫尾工作,下面用代码来进行具体说明. 一.构造函 ...
最新文章
- c语言程序设计现代方法快速排序,C语言实现快速排序改进版
- vue实现上下滑动翻页_vue 实现滚动到底部翻页效果(pc端)
- 基于网络索引树的异常轨迹检测算法
- Object-C非正式协议与正式协议的区别
- Mysql 扩展性设计之数据切分、那么数据切分后会带来哪些问题呢?比如分布式事务、数据的一致性、垂直切分和水平切分应用场景
- R语言中读取xlsx文件的方法
- 压缩软件能否加上忽略某些目录的功能
- java webview事件_捕获“页面已完成加载”事件,并使用xwalk Webview在ionic / cordova MainActivity.java中进行操作...
- Webstorm配置less
- 包含太多_股票开户必备知识,股票交易费包含哪些?
- PowerBI开发 第三篇:报表设计技巧
- 超级计算机阿波罗11,阿波罗11号制导计算机中指令模块和登月模块原始代码已在 GitHub 上开源...
- 【Vue】高级系列(五)Vue模块化实战-demo2-任务清单todoList
- cordova获取手机IMEI
- 从零搭建开发脚手架 Spring Boot集成Mybatis-plus之一
- 转载:在阿里工作四个月经历的总结
- 厦门大学2022年计算机考研复试流程
- Linux系统配置及服务管理_第07章_存储管理2
- opencv的基本数据类型CvPoint,CvSize,CvRect和CvScalar
- 科技的成就(二十九)
热门文章
- CentOS7.5下搭建zabbix3.4监控
- NiFi 脚本执行器使用指南 (part 3)
- spring +springmvc+mybatis组合web.xml文件配置
- django学习笔记之forloop
- 实现pxe的自动化安装
- 网络管理员的爱情,不解释...
- linux命令补遗 - 4
- ASP.NET夜话之21:asp.net网站的性能优化
- mysql boost 5.7.21_mysql 5.7.21 安装配置方法图文教程(window)
- JMX的Hello World