c++基类不为虚析构函数的一个风险

C++中基类的析构函数不是虚函数会带来什么影响 这是因为当一个对象被销毁时,C++编译器默认只调用该对象所属类及其基类的析构函数,但是派生类的析构函数可能会包含特定于该派生类的操作,如释放动态分配的内存。这是因为当使用“delete”删除派生类对象时,只会调用基类的析构函数,这个析构函数并不是虚函数,导致派生类的析构函数没有被正确地调用。总之,如果C++中基类的析构函数不是虚函数,则在使用基类指针来删除派生类对象时,可能会发生问题,导致派生类的析构函数未得到正确的调用。这将确保在使用基类指针删除派生类对象时,正确地调用派生类的析构函数。 阅读详情
#include <iostream>
using namespace std;

class Point {

public:

    //如果这里不写成虚拟的析构函数,子类就会有内存泄漏
	//virtual ~point()
	//{
	//	cout<<"point out"<<endl;
	//}

	~Point()
	{
		cout<<"point out"<<endl;
	}


};

class Cson:public Point
{
public:
	char* data;
	Cson()
	{
		data = (char*)malloc(5);
	}
	~Cson()
	{
		cout<<"cson out"<<endl;
		free(data);
		data = NULL;
	}

};


int main()
{
	Cson* son =  new(std::nothrow) Cson;
	Point* point = NULL;
	if (NULL != son)
	{
		point = son;
		delete point;
	}

	system("pause");
}

//输出结果
/*
point out
请按任意键继续. . .

*/

//子类的析构函数根本没被调用,除非父类的析构函数被声明为virtual
//当然直接delete son,肯定是会调用父类的析构函数的,就不存在问题


Xilinx XDMA IP核配置实战:AXI Memory Mapped vs Stream选型指南(附PCIe调试技巧) 本文深入解析Xilinx XDMA IP核配置中AXI Memory Mapped与AXI Stream两种DMA接口的核心区别与选型策略。针对PCIe高速数据传输场景,详细对比了二者在数据特性、延迟、硬件资源及软件复杂度上的差异,为FPGA工程师在数据采集、实时处理等项目中做出高效设计决策提供实战指南,并附有关键的PCIe调试技巧。 阅读详情

相关推荐

平面变压器PCB绕组设计实战:从原理到布局的工程考量

本文深入探讨了平面变压器PCB绕组设计的工程实践,从基础原理到布局优化,涵盖了电流密度、层间绝缘、绕组拓扑结构等关键参数。通过实战案例分享,解析了高频应用中的集肤效应、邻近效应等挑战,并提供了热管理和EMC优化的实用技巧,助力工程师在服务器电源、车载充电器等空间敏感场景实现高效设计。

weixin_42666036的博客 453

基类的析构函数不是虚函数,会带来什么问题?

派生类的析构函数用不上,会造成资源的泄漏。

Denkensk的专栏 2283

字节开源 DeerFlow 2.0:从 Deep Research 到 Super Agent Harness 的进化之路

GitHub Trending 冠军项目,字节跳动完全开源的超级智能体框架。支持子代理、沙箱执行、长期记忆、技能扩展,可完成从几分钟到几小时的复杂任务。本文深度解析架构设计、安装实战、技能系统,并附上独家配置指南。

qq_38610923的博客 1712

C++继承中的虚析构函数

看看下面程序有什么错误: #include &lt;iostream&gt;using namespace std;class Father{public: Father(){}; ~Father(){};};class Son:public Father{public: Son(){}; ~Son(){};};int main(){ Father *pfath...

weixin_34241036的博客 449

波分复用技术原理

波分复用原理 把不同波长的光信号复用到同一根光纤中进行传送,这种方式我们把它叫做波分复用( Wavelength Division Multiplexing ) 一根光纤被划分为多个波道,多个波长以一定的间隔隔开,在光纤中独立传输。 波分复用应用演示 如果将WDM系统看作交通系统,光纤可以看作是多个车道的公用道路。 各种类型的业务就像货物一样,被打包装载到车辆中。 车辆按照分配的车道行驶至目的地,完成货物的运输。 想要提高波分复用系统的传输容量,就要增加波道数量或是提升单波传...

m0_63251770的博客 9997

用RK3588+FPGA搞定Cameralink高速相机?这份保姆级硬件选型与接口配置指南请收好

本文详细介绍了如何利用RK3588与FPGA构建Cameralink高速相机系统,涵盖硬件选型、接口配置及性能优化等关键步骤。通过异构计算架构和精准的带宽分配,实现工业视觉检测和科研成像领域的高效解决方案,特别适合需要实时处理的复杂应用场景。

weixin_30493401的博客 642

析构函数不是虚函数的话,可能有什么影响。

转自:http://blog.xdnice.com/blog84983i63444.html   通过父类指针,释放子类对象时,子类的析构函数可能调不到,导致内存泄漏。 析构函数在对象生命周期结束或释放时调用。    如果基类的析构函数不是虚拟的,那么派生类的析构函数将不会被调用。     虚拟函数的引入是为了实现多态性(polymorphism),而虚拟析构函数是怎么实现多态性的...

君之剑的专栏 2039

【MFRC522】STM32与MFRC522的SPI通信优化及常见问题解析

本文深入解析了STM32与MFRC522进行SPI通信的优化方法与常见问题。从基础的硬件连接到SPI时序优化,再到关键的寄存器配置(如RFCfgReg设为0x4F以提升读卡稳定性),文章提供了详细的调试技巧和实战排坑指南,帮助开发者实现稳定高效的IC读卡应用。

yhn45678901的博客 841

c++ 如果析构函数不是虚函数会怎样

c++ 如果析构函数不是虚函数会怎样

xie__jin__cheng的博客 315

航空机载总线网络概述

1.机载总线网络概述 现代战斗机的航空电子系统是航空电子技术经历了半个多世纪的漫长演变和不断进步的结果。航空电子系统结构的每次变化,其核心的机载总线网络技术也不断跨上新台阶,而且每次变革都能使飞机性能得到大幅提升。现代飞机的飞行与作战任务包括起飞、巡航、飞行控制、目标搜索、识别跟踪、火控计算、武器投射、制导、电子战、通信等,都需要航空电子系统承担,航空电子系统是现代战斗机的“大脑”和“神经中枢”,机载总线网络则是其关键的“神经网络”。在机载通讯领域发展过程中,具有代表性的典型总线有ARINC429、1553

qq_41854911的博客 1万+

RTK_ROS_导航(4):接入move_base

现在我们要将之前的数据接入到Move_base中,使得机器人能够根据Map上的终点进行导航,并且实现避障效果如下图。

旋风小短腿 1947

【C++】在 C++ 中,如果一个类有虚函数(即它是一个多态基类),那么它应该有一个虚析构函数

如果一个类有虚函数,那么它应该有一个虚析构函数。虚析构函数确保在通过基类指针删除派生类对象时,能够正确调用派生类的析构函数,避免内存泄漏。在你的类中,只需将析构函数声明为虚函数即可解决问题。如果你遵循这个规则,可以避免因多态行为导致的内存泄漏问题。

lijian2017的博客 474

构建基于知识图谱的金融监管合规系统

金融行业是一个高度监管的领域,金融机构需要遵守众多复杂的法规和政策。传统的金融监管合规方式往往依赖于人工审查和简单的规则引擎,效率低下且容易出错。构建基于知识图谱的金融监管合规系统的目的在于利用知识图谱强大的知识表示和推理能力,实现对金融业务数据的自动化分析和合规检查,提高监管合规的效率和准确性。本系统的范围涵盖了金融机构的各类业务,如银行业务、证券业务、保险业务等。

AI天才研究院 1167

70.C++虚析构函数

虚析构函数是在C++中用于处理继承层次结构中的资源释放的一种技术。它在析构函数前加上virtual关键字,以允许正确地销毁派生类对象,即使通过基类指针删除派生类对象也能保证资源正确释放。2.为什么需要虚析构函数当基类指针指向一个派生类对象,并且通过该指针删除对象时,通常只会调用基类的析构函数。这可能导致派生类特有的资源(如动态分配的内存)不会得到正确释放,从而产生内存泄漏。通过将析构函数声明为虚函数,可以确保在删除派生类对象时调用派生类的析构函数,从而正确释放派生类的资源。3.虚析构函数的声明。

weixin_63779802的博客 399

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C++虚析构函数

虚析构函数是指在基类中通过virtualpublic:virtual ~Base() { // 虚析构函数// 基类资源释放逻辑其核心特性是:当通过基类指针/引用删除/销毁派生类对象时,C++ 会根据对象的实际类型(而非指针类型),从派生类到基类逐层调用析构函数,而非仅调用基类析构函数。核心要点说明定义基类中用virtual声明的析构函数,支持多态析构核心用途1. 确保派生类析构函数被调用,释放自身资源;2. 防止内存/资源泄漏未使用的风险。

weixin_51287424的博客 434

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C++抽象基类设计致命错误:忘记定义纯虚析构函数的后果有多严重?

掌握C++抽象基类设计关键细节,避免内存泄漏与程序崩溃。深入解析C++虚析构函数的纯虚情况,涵盖多态场景下的正确实现方法与析构安全机制。理解纯虚析构函数为何必须提供定义,确保派生类对象正确销毁。提升代码健壮性,值得收藏。

DeepLens的博客 476

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Effective C++ 条款07 为多态基类声明virtual析构函数

1. 如果一个类将要作为基类,那么它应该具有一个虚析构函数以防止delete经由基类指针指向的派生类对象时发生的"局部销毁"问题,避免造成内存泄露,数据结构败坏,在调试器上浪费时间等问题;任何带有虚函数的类几乎肯定需要一个虚析构函数. 2. 在不必需的情况下不应该将成员函数设为虚函数,否则,如果导致一个本来没有虚函数的类带有虚函数,那么它就会增加一个隐含的vptr(virtual table p...

yuleidnf的博客 189

虚析构函数

虚函数指针(通常称为虚表指针或vptr)在对象的构造过程中创建。当delete p的时候,有只析构基类不析构派生类的风险。​ 静态成员方法不依赖对象。

指月 443

effective c++条款14学习总结

<br /><br />条款14: 确定基类有虚析构函数<br />    c++语言标准关于这个问题的阐述非常清楚:当通过基类的指针去删除派生类的对象,而基类又没有虚析构函数时,结果将是不可确定的。所以当类要被继承的时候,要有虚析构函数。<br />    如果某个类不包含虚函数,那一般是表示它将不作为一个基类来使用。当一个类不准备作为基类使用时,使析构函数为虚一般是个坏主意。因为这样会增加额外的负担(维护虚函数表)。<br />    最后,值得指出的是,在某些类里声明纯虚析构函数很方便。纯虚函数将产生

husthan的专栏 585

虚析构函数的作用

考虑下面一个函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include using namespace std;   class Base{ public:     Base(

业余码农 585

多态基类的析构函数应为虚函数

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33670713的博客 186

为多态基类声明virtual析构函数

EffectiveC++条款7

qq_53558968的博客 640

揭秘C++对象销毁陷阱:虚析构函数的纯虚实现你真的懂吗?

掌握虚析构函数的纯虚实现,有效避免C++对象销毁陷阱。适用于多态基类设计,确保派生类对象正确释放资源。通过纯虚析构函数强制子类重写,结合默认实现防止链接错误,兼具接口规范与安全性。提升程序稳定性,值得收藏。

PixelFlow的博客 956

C++学习——如何析构派生类

C++析构派生类、虚函数、抽象类

MaoSiri的博客 1308

Effective C++ 读书笔记 条款07:为多太基类声明virtual析构函数

Core List 1. 局部释放空间

489

C++ 构造/析构函数调用顺序以及什么是虚析构函数?为什么需要它?

C++ 构造/析构函数调用顺序以及什么是虚析构函数?为什么需要它?

weixin_45481496的博客 567
上一篇: gdb中汇编调试
下一篇: C 箴言:多态基类中将析构函数声明为虚拟
RunBoying
博客等级 码龄17年 41粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值