首页 > 其他分享 >为什么需要虚函数?

为什么需要虚函数?

时间:2023-11-29 13:34:03浏览次数:26  
标签:为什么 调用 函数 派生类 需要 析构 基类 指针

在C++中,如果基类的析构函数不是虚函数,那么在使用基类指针删除派生类对象时,只会调用基类的析构函数,而不会调用派生类的析构函数。

这是因为在C++中,非虚函数是在编译时期就已经确定了调用关系,这种确定调用关系的方式被称为静态绑定。当基类指针指向派生类对象时,如果析构函数不是虚函数,那么在删除指针时,由于静态绑定,编译器只会调用基类的析构函数。

然而,如果基类的析构函数是虚函数,那么在删除指针时,会先调用派生类的析构函数,然后再调用基类的析构函数。这是因为虚函数是在运行时期才确定调用关系,这种确定调用关系的方式被称为动态绑定。

因此,如果派生类中有需要在析构函数中释放的资源,那么基类的析构函数必须是虚函数,以确保派生类的析构函数能够被正确地调用,从而避免内存泄漏。这也是为什么在设计基类时,通常会将析构函数声明为虚函数。但是,如果确定一个类不会被用作基类,那么其析构函数就不需要声明为虚函数。

 

标签:为什么,调用,函数,派生类,需要,析构,基类,指针
From: https://www.cnblogs.com/whcjob/p/17864633.html

相关文章

  • Python - pandas agg 函数
    agg()函数的常见用法是在分组数据后对特定列应用一个或多个聚合函数,生成汇总统计信息。例如,你可以对数据按照某个列进行分组,然后计算每个组的平均值、总和等。file:[差额对比分析.py]importpandasaspdzhaocai="C:\\Users\\root\\Downloads\\医疗机构入库明细.xlsx"zhao......
  • 学习笔记434—【Matlab】Matlab读取dcm图像的函数
    【Matlab】Matlab读取dcm图像的函数Matlab版本:2020a一、dicomread函数Matlab读取dcm图像的函数是dicomread,根据dicomread的帮助文档,该函数有四种参数输入方式:X=dicomread(filename);%根据文件名直接读取X=dicomread(info);%根据构造的info结构体读取X=dicomrea......
  • 一些有用的自定义函数(抄录)
    提取字符串中的数字'提取字符串中的数字FunctionGetDigits(strTextAsString)AsStringDimstrCharAsString,strMsgAsStringDimiAsLongstrMsg=""Fori=1ToLen(strText)strChar=Mid(strText,i,1)IfstrCharLike"#"The......
  • 强化学习:AC算法中为什么不使用Q函数来表示优势函数
      《High-DimensionalContinuousControlUsingGeneralizedAdvantageEstimation》      ====================== 原论文: ......
  • Python高阶函数
     map#map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。reduce#reduce把一个函数作用在一个序列[x1,x2,x3,...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效......
  • 教育行业CRM需要的四大功能
     教育行业的发展一波三折,要想在激烈的赛道脱颖而出,就需要有一套有效的CRM系统,来帮助教育机构提升招生效率、增加学员留存、提高教学质量。下面说说,教育企业选择CRM系统要具备的四大功能。1、招生管理功能教育机构的首要目标便是招生,CRM系统要能够帮助教育机构管理潜在学员、......
  • 【Azure Function App】如何修改Azure函数应用的默认页面呢?
    问题描述当在Azure中创建了一个函数应用(FunctionApp)后,访问默认URL会得到一个默认的页面。是否有办法修改这个默认页面呢?  问题解答在之前的博文中,介绍了修改AppService的默认页面。1:【Azure应用服务】AppService默认页面暴露Tomcat版本信息,存在安全风险:2:【Azure应用服务......
  • quickjs调用lvgl函数
    实现本次使用quickjs的最主要目的,就是通过程序动态加载js,然后调用lvgl函数库,实现渲染。以达到类似小程序的效果。后续还会实现类似小程序效果,通过quickjs解析xml(html),编译成js然后调用lvgl库,实现界面渲染。通过quickjs会调用c语言提供的底层功能,如wifi、蓝牙、串口uart、iic......
  • python利用with语句分割长函数代码块的小技巧
    如果某个函数实现很长,有时候希望把函数分割成若干部分,并且可以折叠,执行时能够打印日志.可以采用下面的办法来实现:frommylogimportloggerimporttimeclassMyTask:def__init__(self,task:str)->None:self.task:str=taskself.start_time......
  • 三道函数小题:判断是否是闰年、是否是素数和二分查找
    一、用函数打印100-200之间的素数#include<stdio.h>intis_prime(inti){intn=0;for(n=2;n<i;n++){if(n%i==0)return0;}return1;}intmain(){inti=0;for(i=100;i<=200;i++){if(is_prime(i)==1);printf("%d"......