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

【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,以保证正确的析构顺序。

相关文章:

  • MCP与检索增强生成(RAG):AI应用的强大组合
  • 卫星的“太空陀螺”:反作用轮如何精准控制姿态?
  • 十六、【前端强化篇】完善 TestCase 编辑器:支持 API 结构化定义与断言配置
  • leetcode 455. Assign Cookies和2410. Maximum Matching of Players With Trainers
  • Redis命令使用
  • 神经网络-Day44
  • LabVIEW的MathScript Node 绘图功能
  • 【开源工具】基于PyQt5工作时长计算器工具开发全解析
  • 【Blender Texture】【游戏开发】高质感 Blender 4K 材质资源推荐合集 —— 提升场景真实感与美术表现力
  • 基于BP神经网络的语音特征信号分类
  • web全栈开发学习-01html基础
  • 服务器中僵尸网络攻击是指什么?
  • 机器学习算法分类
  • 聊聊FlaUI:让Windows UI自动化测试优雅起飞!
  • 卫星在轨姿态控制技术详解:从自旋稳定到高精度闭环控制
  • SimpleDateFormat 和 DateTimeFormatter 的异同
  • lc hot 100之:dummy哨兵节点创建方法
  • 每天总结一个html标签——Audio音频标签
  • 代码训练LeetCode(21)跳跃游戏2
  • rknn优化教程(一)
  • 爬黄山旅游攻略游览路线/吉林百度seo公司
  • 做商业网站需要注册公司吗/搜索引擎seo优化怎么做
  • 产品做网站不花钱/百度怎么发免费广告
  • 资兴做网站公司/手机系统流畅神器
  • 简单的美食网站模板/怎么开网店新手入门
  • 成全视频免费高清观看在线播放下载/黑帽seo是什么