构造函数为什么一般不定义为虚函数?而析构函数一般写成虚函数的原因 ?
1、构造函数不能声明为虚函数
1)因为创建一个对象时需要确定对象的类型,而虚函数是在运行时确定其类型的。而在构造一个对象时,由于对象还未创建成功,编译器无法知道对象的实际类型,是类本身还是类的派生类等等
2)虚函数的调用需要虚函数表指针,而该指针存放在对象的内存空间中;若构造函数声明为虚函数,那么由于对象还未创建,还没有内存空间,更没有虚函数表地址用来调用虚函数即构造函数了
2、析构函数最好声明为虚函数
首先析构函数可以为虚函数,当析构一个指向派生类的基类指针时,最好将基类的析构函数声明为虚函数,否则可以存在内存泄露的问题。
如果析构函数不被声明成虚函数,则编译器实施静态绑定,在删除指向派生类的基类指针时,只会调用基类的析构函数而不调用派生类析构函数,这样就会造成派生类对象析构不完全。
构造函数为什么一般不定义为虚函数?而析构函数一般写成虚函数的原因 ?相关推荐
- 析构函数为什么写成虚函数?
由于类的多态性,基类指针可以指向派生类的对象.如果删除该基类的指针,就会调用该指针指向的派生类的析构函数,而派生类的析构函数又会自动调用基类的析构函数,这样整个派生类的对象被完全释放.· 如果析构函数 ...
- 构造函数不可以声明为虚函数,析构函数可以声明为虚函数
构造函数不能声明为虚函数,而析构函数可以声明为虚函数,在有的情景下析构函数必须声明为虚函数. 不建议在构造函数和析构函数里调用虚函数. 构造函数不能声明为虚函数的原因? 构造一个对象时,必须知道对象 ...
- 为什么基类的析构函数要声明成虚函数
记得以后基类(父类) 的析构函数最好是声明为 虚函数 即:virtual 开发中遇到了一个比较傻逼的bug,也证明了理论与实际之间的差距. 在基类中没有声明其析构函数为虚函数,导致delete 释放操 ...
- 【C++】浅析析构函数(基类中)为什么要写成虚基类?
为什么有了虚析构函数,就能先调用子类的析构函数? class A {virtual ~A(){} };class B : A {virtual ~B(){} };A *p = new B(); del ...
- 如何在MATLAB中调用(运行)“用Python写成的函数或脚本”
如何在MATLAB中调用"用Python写成的函数或脚本",首先要确保MATLAB知道咱们的Python解释器的位置在哪里. 如果安装了Python的时候把Python加入了系统环 ...
- excel函数应用:如何写出IF函数多级嵌套公式
说到函数就不得不提起函数中最受欢迎的三大家族:求和家族.查找引用家族.逻辑家族!!!没错!今天我们要介绍的就是三大家族之一逻辑函数家族的领头人:IF函数--很多人难以理解IF函数的多级嵌套使用.其实, ...
- 51单片机STC89C52控制LED闪烁(将延时程序写成子函数有形参)
/*-----------------------包含头文件区域-------------------------*/ #include<reg52.h> //单片机头文件 /*----- ...
- 构造函数和析构函数能否声明为虚函数?
构造函数不能声明为虚函数,析构函数可以声明为虚函数,而且有时是必须声明为虚函数. 不建议在构造函数和析构函数里面调用虚函数. 构造函数不能声明为虚函数的原因是: 解释一:所谓虚函数就是多态情况下只执行 ...
- 虚函数、纯虚函数、虚函数与析构函数
一.虚函数 只有用virtual声明类的成员函数,使之成为虚函数,不能将类外的普通函数声明为虚函数.因为虚函数的作用是允许在派生类中对基类的虚函数重新定义.所以虚函数只能用于类的继承层次结构中. 一个 ...
最新文章
- MYSQL数据库——mysql的数据类型和运算符
- PHP正则表达式详解
- placeholder的兼容处理(jQuery下)
- 记一次Nacos的issue修复之并发导致的NPE异常
- VTK:绘图之HistogramBarChart
- break和continue-break代码演练
- volatile指令重排_有多少人面试栽到Volatile上?面试问题都总结到这儿了
- 【优化算法】多目标粒子群优化算法(MOPSO)【含Matlab源码 033期】
- 对数幅度谱图像matlab,幅度谱 fft2绘制图像的对数幅度谱,比较图像旋转、平移和缩放后的频谱...
- HRM人力资源系统-Day13
- Dreamweaver CSs网页设计css规则定义翻译
- 设置里怎么开启微信定位服务器,微信定位开启怎么设置(如何开启微信定位功能)...
- e480换高分屏_四世同堂,12年一轮回,再赏ThinkPad机型
- Neo4j Cypher查询语言详解
- Python——CSV读取大文件报错_csv.Error: field larger than field limit
- LeetCode每日一题(2022/5/31)剑指 Offer II 114. 外星文字典(困难)
- 图片标注工具 LabelImg 使用教程
- 商业银行信贷业务(一)
- 批量爬取百度贴吧里的标题及链接
- VS2019 使用GIT
热门文章
- 【 uC/OS II 】uC/OS II 源代码阅读(os_task.c)任务管理
- Windows下select模型(以及EAGAIN、EWOULDBLOCK、EINTR)
- 什么是主密钥、工作密钥、会话密钥、PIN密钥?
- 图形学相关期刊和会议的基本信息
- 使用CG MAGIC这款插件都遇到了哪些常见问题?
- float转int的时候精度丢失
- Jumony Core 2.2 发布
- 语音模块的开发(LU-ASR01智能语音控制模块)
- Linux使用SSH上传下载文件,Linux下通过ssh scp命令上传下载文件
- 年轻人,你对io一无所知