c++ | 有趣的动态转换之 delete 崩溃探究兼谈基类虚析构的重要性

本文详细分析了C++中动态转换导致的delete操作崩溃的原因,指出错误源于非虚析构函数。通过反汇编代码解析,揭示了析构函数为虚函数在多态基类中的必要性,并提醒开发者在基类中声明虚析构函数的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在《有趣的动态转换》 这篇文章中,运行 测试代码3 会崩溃。本文试图揭示崩溃的原因。

错误更正

在开始之前,需要更正《C++ 虚函数简介》中的一个错误。关于 CBaseCDerived 的虚表内容,析构函数的位置并不是直接存储了虚函数的地址,而是存储了一段编译器生成的函数,该函数内部会调用对应的析构函数。
在这里插入图片描述

所以正确的虚表应该是下面这样的:
在这里插入图片描述

注意:debug 版默认会引入另外一层间接层,而 release 版不会。

错误回顾

回顾一下 测试代码3 运行后的错误提示,如下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值