1、构造函数不能声明为虚函数

1)因为创建一个对象时需要确定对象的类型,而虚函数是在运行时确定其类型的。而在构造一个对象时,由于对象还未创建成功,编译器无法知道对象的实际类型,是类本身还是类的派生类等等

2)虚函数的调用需要虚函数表指针,而该指针存放在对象的内存空间中;若构造函数声明为虚函数,那么由于对象还未创建,还没有内存空间,更没有虚函数表地址用来调用虚函数即构造函数了

2、析构函数最好声明为虚函数

首先析构函数可以为虚函数,当析构一个指向派生类的基类指针时,最好将基类的析构函数声明为虚函数,否则可以存在内存泄露的问题。

如果析构函数不被声明成虚函数,则编译器实施静态绑定,在删除指向派生类的基类指针时,只会调用基类的析构函数而不调用派生类析构函数,这样就会造成派生类对象析构不完全。

构造函数为什么一般不定义为虚函数?而析构函数一般写成虚函数的原因 ?相关推荐

  1. 析构函数为什么写成虚函数?

    由于类的多态性,基类指针可以指向派生类的对象.如果删除该基类的指针,就会调用该指针指向的派生类的析构函数,而派生类的析构函数又会自动调用基类的析构函数,这样整个派生类的对象被完全释放.· 如果析构函数 ...

  2. 构造函数不可以声明为虚函数,析构函数可以声明为虚函数

    构造函数不能声明为虚函数,而析构函数可以声明为虚函数,在有的情景下析构函数必须声明为虚函数.  不建议在构造函数和析构函数里调用虚函数. 构造函数不能声明为虚函数的原因? 构造一个对象时,必须知道对象 ...

  3. 为什么基类的析构函数要声明成虚函数

    记得以后基类(父类) 的析构函数最好是声明为 虚函数 即:virtual 开发中遇到了一个比较傻逼的bug,也证明了理论与实际之间的差距. 在基类中没有声明其析构函数为虚函数,导致delete 释放操 ...

  4. 【C++】浅析析构函数(基类中)为什么要写成虚基类?

    为什么有了虚析构函数,就能先调用子类的析构函数? class A {virtual ~A(){} };class B : A {virtual ~B(){} };A *p = new B(); del ...

  5. 如何在MATLAB中调用(运行)“用Python写成的函数或脚本”

    如何在MATLAB中调用"用Python写成的函数或脚本",首先要确保MATLAB知道咱们的Python解释器的位置在哪里. 如果安装了Python的时候把Python加入了系统环 ...

  6. excel函数应用:如何写出IF函数多级嵌套公式

    说到函数就不得不提起函数中最受欢迎的三大家族:求和家族.查找引用家族.逻辑家族!!!没错!今天我们要介绍的就是三大家族之一逻辑函数家族的领头人:IF函数--很多人难以理解IF函数的多级嵌套使用.其实, ...

  7. 51单片机STC89C52控制LED闪烁(将延时程序写成子函数有形参)

    /*-----------------------包含头文件区域-------------------------*/ #include<reg52.h> //单片机头文件 /*----- ...

  8. 构造函数和析构函数能否声明为虚函数?

    构造函数不能声明为虚函数,析构函数可以声明为虚函数,而且有时是必须声明为虚函数. 不建议在构造函数和析构函数里面调用虚函数. 构造函数不能声明为虚函数的原因是: 解释一:所谓虚函数就是多态情况下只执行 ...

  9. 虚函数、纯虚函数、虚函数与析构函数

    一.虚函数 只有用virtual声明类的成员函数,使之成为虚函数,不能将类外的普通函数声明为虚函数.因为虚函数的作用是允许在派生类中对基类的虚函数重新定义.所以虚函数只能用于类的继承层次结构中. 一个 ...

最新文章

  1. MYSQL数据库——mysql的数据类型和运算符
  2. PHP正则表达式详解
  3. placeholder的兼容处理(jQuery下)
  4. 记一次Nacos的issue修复之并发导致的NPE异常
  5. VTK:绘图之HistogramBarChart
  6. break和continue-break代码演练
  7. volatile指令重排_有多少人面试栽到Volatile上?面试问题都总结到这儿了
  8. 【优化算法】多目标粒子群优化算法(MOPSO)【含Matlab源码 033期】
  9. 对数幅度谱图像matlab,幅度谱 fft2绘制图像的对数幅度谱,比较图像旋转、平移和缩放后的频谱...
  10. HRM人力资源系统-Day13
  11. Dreamweaver CSs网页设计css规则定义翻译
  12. 设置里怎么开启微信定位服务器,微信定位开启怎么设置(如何开启微信定位功能)...
  13. e480换高分屏_四世同堂,12年一轮回,再赏ThinkPad机型
  14. Neo4j Cypher查询语言详解
  15. Python——CSV读取大文件报错_csv.Error: field larger than field limit
  16. LeetCode每日一题(2022/5/31)剑指 Offer II 114. 外星文字典(困难)
  17. 图片标注工具 LabelImg 使用教程
  18. 商业银行信贷业务(一)
  19. 批量爬取百度贴吧里的标题及链接
  20. VS2019 使用GIT

热门文章

  1. 【 uC/OS II 】uC/OS II 源代码阅读(os_task.c)任务管理
  2. Windows下select模型(以及EAGAIN、EWOULDBLOCK、EINTR)
  3. 什么是主密钥、工作密钥、会话密钥、PIN密钥?
  4. 图形学相关期刊和会议的基本信息
  5. 使用CG MAGIC这款插件都遇到了哪些常见问题?
  6. float转int的时候精度丢失
  7. Jumony Core 2.2 发布
  8. 语音模块的开发(LU-ASR01智能语音控制模块)
  9. Linux使用SSH上传下载文件,Linux下通过ssh scp命令上传下载文件
  10. 年轻人,你对io一无所知