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

C++析构函数详解

析构函数的作用

析构函数的主要作用是 释放对象持有的资源,而不是释放对象本身的内存空间。

  • 资源释放:如动态分配的内存(new)、文件句柄、数据库连接、网络套接字、锁等。

  • 对象内存空间:对象本身的内存(包括成员变量)由系统自动回收,析构函数不负责这部分。


析构函数的特性

  1. 命名规则

    • 析构函数名是 ~ + 类名,如 ~ClassName()

    • 无参数、无返回值(甚至没有 void)。

  2. 不可重载

    • 一个类只能有一个析构函数,不能重载(因为析构函数没有参数,无法区分不同的版本)。

  3. 默认析构函数

    • 如果未显式定义析构函数,编译器会自动生成一个 默认析构函数

    • 默认析构函数的行为

      • 对 内置类型(intfloat, 指针等)不做任何操作(不会自动释放它们指向的资源)。

      • 对 自定义类型成员,会调用其析构函数(递归执行)。

  4. 调用时机

    • 栈对象:离开作用域时自动调用。

    • 堆对象delete 时先调用析构函数,再释放内存。

    • 全局/静态对象:程序结束时调用。

  5. 内置类型 vs. 自定义类型

    • 内置类型:析构函数不会自动释放它们的资源(例如 int* p,析构函数不会 delete p,需要手动管理)。

    • 自定义类型:会调用其析构函数(例如类成员 std::string name,会调用 ~string())。

    • 对象内存释放

1. 堆对象(动态分配)

生命周期管理:

  • 手动分配:用 new 申请内存

  • 手动释放:必须用 delete 释放,delete的底层分两步,第一步调析构释放资源,第二步调free释放对象本身

2. 栈对象(自动管理)

生命周期管理:

  • 自动分配:在作用域内定义

  • 自动释放:离开作用域时,调用析构释放资源,然后释放对象本身,这个过程是编译器编好指令,操作系统执行

http://www.xdnf.cn/news/3594.html

相关文章:

  • Socat 用法详解:网络安全中的瑞士军刀
  • 部署Superset BI(一)试水
  • 非对称加密算法(RSA、ECC、SM2)——密码学基础
  • 2025年- H18-Lc126-54.螺旋矩阵(矩阵)---java版
  • 【阿里云大模型高级工程师ACP习题集】2.9 大模型应用生产实践(上篇)
  • Android学习总结之jetpack组件间的联系
  • HTTP和HTTPS
  • IntelliJ IDEA
  • 微信小程序
  • Python集合全解析:从基础到高阶应用实战
  • 信息收集新利器:SSearch Chrome 插件来了
  • 如何理解 MCP 和 A2A 的区别?|AI系统架构科普
  • B站Michale_ee——ESP32_IDF SDK——FreeRTOS_5 事件组同步与等待
  • 驱动开发系列56 - Linux Graphics QXL显卡驱动代码分析(三)显示模式设置
  • wpf 输入框 在输入时去除水印
  • 开闭原则与依赖倒置原则区别:原类不变,新增类(功能)vs 接口类不变,原实现类可变
  • 十分钟用Docker搭建功能齐全的Poste.io邮件服务器
  • 分布式理论:常见分布式协议的概览与解析
  • 原地轮转数组的两种高效实现详解
  • 使用 Java 实现一个简单且高效的任务调度框架
  • HTTPS协议:更安全的HTTP
  • Qt通过QXlsx库文件写入到excl文件,读取excl文件
  • PowerBI实现点击空白处隐藏弹窗(详细教程)
  • pip 常用命令及配置
  • Linux发展史、开源文化与技术生态全景
  • 10 种微服务设计模式
  • python实现基于Windows系统计算器程序
  • 【Linux】Linux奇技淫巧
  • 【AI论文】Sadeed:通过小型语言模型推进阿拉伯语变音
  • (36)VTK C++开发示例 ---纹理贴图四边形