析构函数,也叫析构器,对象在销毁的时候,会自动调用析构函数,一般用于完成对象的清理工作。

析构函数与类同名,以 ~ 开头,没有返回值(void都不能写),不接受任何参数,不能被重载。所以,对于一个给定的类来说,只有唯一一个析构函数。

如果我们自己不写析构函数,编译器会生成一个默认的析构函数,其函数体为空 {},表示没干什么有意义的事。

构造函数、析构函数要声明为 public 才能被外界正常使用。

通过 malloc()/free() 分配和释放的对象不会调用其构造函数和析构函数。

#include <iostream>
using namespace std;struct Person
{int m_age;Person(){cout << "Person::Person()" << endl;}~Person(){cout << "Person::~Person()" << endl;}void run(){cout << "Person::run() - " << m_age << endl;}
};int main()
{Person* p = (Person*)malloc(sizeof(Person));p->m_age = 10;p->run();free(p);return 0;
}

通过 new/delete 分配和释放的对象会调用其构造函数和析构函数。

#include <iostream>
using namespace std;struct Person
{int m_age;Person(){cout << "Person::Person()" << endl;}~Person(){cout << "Person::~Person()" << endl;}void run(){cout << "Person::run() - " << m_age << endl;}
};int main()
{Person* p = new Person; // 构造函数被调用p->m_age = 10;p->run();delete p; // 析构函数被调用return 0;
}

【深入理解C++】析构函数相关推荐

  1. vector用erase删除元素时,为什么被删元素的析构函数会被调用更多次?

    vector用erase删除元素时,为什么被删元素的析构函数会被调用更多次? 分类: C++2011-08-18 14:55 720人阅读 评论(0) 收藏 举报 vectoriteratorexce ...

  2. 通俗易懂解释一下C++的构造函数是怎样的呢?

    你买了套房,住进去之前得先装修. 你买个硬盘,用之前得先分区. 你买个手机,用之前得先装上sim卡.下载一些必要软件.注册/登录微信/支付宝账户. 创建一个对象也一样:你得到了一块内存:这块内存可能是 ...

  3. Python基础day08【面向对象(类、对象、属性)、魔方方法(init、str、del、repr)】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员]   目录 0.复习 1.类外部添加和获取对象属性 2.类内部操作属性 3.魔法方法 3.1.__i ...

  4. 介绍Python的魔术方法 - Magic Method

    前言 在Python中,所有以__双下划线包起来的方法,都统称为"魔术方法".比如我们接触最多的__init__. 有些魔术方法,我们可能以后一辈子都不会再遇到了,这里也就只是简单 ...

  5. AJPFX讲解Java 性能优化[4]:关于 finalize 函数

    ★finalize 函数的调用机制 俺经常啰嗦:"了解本质机制的重要性".所以今天也得先谈谈 finalize 函数的调用机制.在聊之前,先声明一下:Java虚拟机规范(见&quo ...

  6. java finalize方法的使用

    <JAVA编程思想>: Java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize(). (1).对象不一定会被回收. (2).垃圾回收不是析构函数. ( ...

  7. utittest和pytest中mock的使用详细介绍

    Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为. python3.3 以前,mock是第三方库,需要安装之后才能使用 ...

  8. 数据结构与算法_二叉树遍历

    文章目录 0. 前言 0.1 二叉树的结构体 1.二叉树的遍历 1.1 二叉树前序遍历(根→左→右) 1.2 二叉树的中序遍历(左-根-右) 1.3 后序遍历(左-右-根) 1.4 二叉树层序遍历结果 ...

  9. Python——单元测试中mock原理和使用

    摘要 mock主要是的为了提供开发程序员的做一个的单元测试而使用的.假设你开发一个项目,里面包含了一个登录模块,登录模块需要调用身份证验证模块中的认证函数,该认证函数会进行值的返回,然后系统根据这个返 ...

  10. 个人对继承理解以及虚析构函数的理解

    今天又从新研究了下继承和重载,感觉又有新的体会. 首先是对继承的理解,继承简单的说就是把基类的东西保留下来(一般都是public继承,这样基类中的public成员继承过来后还是public,基类中的p ...

最新文章

  1. oracle中 关于触发器,oracle 闪回关于触发器的bug
  2. Java怎么xml拒绝,Sun Java运行时环境XML解析拒绝服务漏洞
  3. matlab内将数组内所有数累乘,数学实验上机汇总【未完成】
  4. git push origin master报错
  5. Oracle按用户进行统计信息更新
  6. 如何备份和还原您的Kubernetes集群资源和持久卷?
  7. 单链表遍历_单链表及其遍历实现的基本操作
  8. Mybatis笔记 – Po映射类型
  9. 什么是面向服务的体系结构(SOA)?(转载)
  10. 在没有显示器和IP未知的情况下如何使用树莓派
  11. AD教程系列 | 4 - 创建集成库文件
  12. 影响力最大化——CELF算法的简介与python实现
  13. 2017年油价调整时间表
  14. MALLOC_PERTURB_ 环境变量
  15. MySQL之SELECT函数
  16. EXCEL中去掉单元格首尾空格,保留字符串中间空格
  17. 实现pygame自定义鼠标外形
  18. AUTO_ACKNOWLEDGE和CLIENT_ACKNOWLEDGE
  19. 无线射频专题《射频基础,射频特征,波长,频率,振幅,相位》
  20. 交换机怎么用计算机配置,配置交换机,详细教您怎么配置交换机

热门文章

  1. (翻译)用户友好的表格的9种设计技巧
  2. linux 内核网络中 RPS/RFS 原理Ⅰ
  3. 一个简单移动页面ionic打包成app
  4. 仿b站Java_推荐 9 个 GitHub 上练手项目(在线考试、仿美团、仿抖音、仿B站、仿头条...)...
  5. 【Linux服务器架设】搭建存储服务器-NFS
  6. 计算机里没有usb驱动设备,USB驱动,电脑没有usb驱动怎么办
  7. 水星路由器设置显示服务器,水星路由器设置的方法
  8. RabbitMQ 工作模式二
  9. 以一己之力,生抗美团技术博客!
  10. 1.Series和DataFrame