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

【C/C++】析构函数好玩的用法:~Derived() override

文章目录

  • 析构函数好玩的用法:~Derived() override
    • 正确使用 `override` 修饰析构函数的前提
      • 示例
    • 错误使用:基类析构函数不是 virtual
    • 使用 `override` 修饰析构函数的作用和好处
    • 总结

析构函数好玩的用法:~Derived() override

在 C++ 中,override 关键字的主要作用是用于标识虚函数重写(重载)基类中的虚函数对于析构函数而言,是否可以加 override,取决于基类的析构函数是否是虚的


正确使用 override 修饰析构函数的前提

基类析构函数是 virtual 的,并且你在派生类中重写它。

示例

class Base {
public:virtual ~Base() {}  // 基类的析构函数是虚的
};class Derived : public Base {
public:~Derived() override {  // 正确:重写了 Base 的虚析构函数// 清理资源}
};

这个写法是合法的,override 告诉编译器你是显式重写了一个虚函数,避免写错函数签名而导致的隐藏错误。


错误使用:基类析构函数不是 virtual

class Base {
public:~Base() {}  // 不是 virtual
};class Derived : public Base {
public:~Derived() override {}  // ❌ 错误:基类没有虚析构函数
};

这种情况下编译会报错:

error: 'Derived::~Derived' marked 'override', but does not override

使用 override 修饰析构函数的作用和好处

  • 防止签名错误:编译器会检查你是否真的重写了基类的虚函数(即签名必须完全匹配)。
  • 更安全的多态析构:当你通过基类指针释放派生类对象时,确保调用派生类的析构函数。

总结

条件是否可以 override 析构函数
基类析构函数是 virtual✅ 可以使用 override
基类析构函数不是 virtual❌ 不可以使用 override,会编译错误

如无特殊需求,建议始终为有继承关系的基类添加 virtual 析构函数,并在派生类中使用 override,以保证正确的析构顺序。

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

相关文章:

  • day44python打卡
  • AI 基础应用与提示词工程
  • 深入理解计算机进制:从原理到 C++ 实现
  • WireShark相关技巧
  • 根据重叠点云生成匹配图像之间的对应点对
  • 【二分图 图论】P9384 [THUPC 2023 决赛] 着色|普及+
  • AI数字人软件开发:赋能企业数字化转型,打造智能服务新标杆
  • c#压缩与解压缩-SharpCompress
  • MySQL EXPLAIN 命令详解
  • 为什么选择电商平台API接口服务商?
  • 剑指offer16_在O(1)时间删除链表结点
  • Google AI 模式下的SEO革命:生成式搜索优化(GEO)与未来营销策略
  • 假票入账会怎样?
  • 沉金电路板有哪些特点?
  • JDK 8 到 JDK 24 新特性大全
  • [3-02-01].第13节:三方整合 - Jedis客户端操作Redis
  • 基于VMD-LSTM融合方法的F10.7指数预报
  • return this;返回的是谁
  • 遍历继承QObject的对象的属性
  • macOS 连接 Docker 运行 postgres,使用navicat添加并关联数据库
  • Inno Setup 脚本中常用术语释义
  • Python中库的安装使用过程详解
  • Spring Boot微服务架构(十一):独立部署是否抛弃了架构优势?
  • 嵌入式Linux之RK3568
  • 本地日记本,用于记录日常。
  • OpenHarmony 5.0横竖屏界面适配
  • SEM: Enhancing Spatial Understanding forRobust Robot Manipulation
  • QMap清空手动分配的内存
  • 在WordPress上添加隐私政策页面
  • 深入解析 C++ 多态:从原理到实战