当前位置: 首页 > news >正文

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.lryc.cn/news/278276.html

相关文章:

  • nodejs 服务端token 高效缓存验证
  • C++内存管理机制(侯捷)笔记2
  • java基础之异常练习题
  • 智慧旅游景区解决方案:PPT全文49页,附下载
  • Demo: 给图片添加自定义水印并下载
  • 黑马苍穹外卖学习Day5
  • 【.NET Core】可为null类型详解
  • 基于知识图谱的健康知识问答系统
  • 橘子学K8S03之容器的理解
  • 算法第十二天-矩形区域不超过K的最大数值和
  • 【js】js数组对象去重:
  • python高校舆情分析系统+可视化+情感分析 舆情分析+Flask框架(源码+文档)✅
  • Phaser详解
  • 2个nodejs进程利用redis 实现订阅发布
  • LeetCode——2397. 被列覆盖的最多行数
  • java通过HttpClient方式实现https请求的工具类(绕过证书验证)
  • 【自学笔记】01Java基础-07面向对象基础-04接口与内部类详解
  • 【cmu15445c++入门】(5)c++中的模板类
  • MongoDB聚合:$bucket
  • 从优化设计到智能制造:生成式AI在可持续性3D打印中的潜力和应用
  • vue3 响应式api中特殊的api
  • 【大厂算法面试冲刺班】day2:合并两个有序链表
  • 【JaveWeb教程】(19) MySQL数据库开发之 MySQL数据库操作-DML 详细代码示例讲解
  • Web前端篇——ElementUI之el-scrollbar + el-backtop + el-timeline实现时间轴触底刷新和一键返回页面顶部
  • CAS-ABA问题编码实战
  • Linux 常用进阶指令
  • windows通过ssh连接Liunx服务器并实现上传下载文件
  • 【K8S 存储卷】K8S的存储卷+PV/PVC
  • 工业智能网关如何保障数据通信安全
  • 基于Springboot的课程答疑系统(有报告)。Javaee项目,springboot项目。