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

构造函数为什么不能为虚函数?析构函数为什么要为虚函数?

构造函数为什么不能为虚函数?

  • 从存储空间角度。虚函数是由虚函数表(vtable)来管理的,而指向虚函数表的虚函数表指针是属于对象,存储在对象的内存空间的。问题就来了,假设构造函数是虚的,就必须要通过虚函数表来调用,但是在调用构造函数之前,对象是还没有实例化的,也就是内存空间还没有,也就意味着没有虚函数表指针。所以构造函数不能是虚函数。

析构函数为什么要为虚函数?

  • 直接的讲,C++中基类采用virtual虚析构函数是为了防止内存泄漏
  • 具体地说,如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放。假设基类中采用的是非虚析构函数,当删除基类指针指向的派生类对象时就不会触发动态绑定,因而只会调用基类的析构函数不调用派生类的析构函数。那么在这种情况下,派生类中申请的空间就得不到释放从而产生内存泄漏

所以,为了防止这种情况的发生,C++中基类的析构函数应采用virtual虚析构函数。


http://www.kler.cn/a/2698.html

相关文章:

  • C语言初阶习题【25】strcpy的模拟实现
  • 测试ip端口-telnet开启与使用
  • DeepSeek-V3与GPT-4o的对比详解
  • DuckDB:PRAGMA语句动态配置数据库行为
  • 3D机器视觉的类型、应用和未来趋势
  • 2025最新解决方案:新买的mac鼠标和这个触控板反向
  • Linux内核进程管理几种CPU调度策略
  • 全网最完整,接口测试总结彻底打通接口自动化大门,看这篇就够了......
  • MyBatisPlus+SpringBoot实现乐观锁功能
  • 智能火焰与烟雾检测系统(Python+YOLOv5深度学习模型+清新界面)
  • 2023年江苏省职业院校技能大赛中职网络安全赛项试卷-教师组任务书
  • Spark Streaming DStream的操作
  • uni-app+uView如何轮播图滑动时改变背景颜色和导航栏颜色
  • Mybatis(二):实现“增删改查”
  • 加载Word2Vec模型时候出现的错误总结
  • 具备人脸识别功能的多目标在线实时行为检测(yolov5+deepsort+slowfast)
  • [数据结构]直接插入排序、希尔排序
  • gns3:动态路由(ospf) area0 骨干网络(域间)(ABR)+ ospf 连接 rip (外部)(ASBR)+ 区域划分
  • tiles-api-2.0.4 升级tiles3.0.8遇到的问题
  • 三十七、实战演练之接口自动化平台的文件上传
  • MyBatisPlus的Wrapper使用示例
  • 在linux上安装配置nodejs工具,设置环境变量,设置npm国内镜像源,提高下载速度。
  • 深度学习应用技巧4-模型融合:投票法、加权平均法、集成模型法
  • cjson文件格式介绍
  • 音视频开发—MediaCodec 解码H264/H265码流视频
  • SpringBoot 结合RabbitMQ与Redis实现商品的并发下单【SpringBoot系列12】