首先,构造函数是不能为虚函数的

调用构造函数后, 才能生成一个对象。 假设构造函数是虚函数, 虚函数存在于虚函数表中, 而去找虚函数表又需要虚函数表指针, 而虚函数表指针又存在于对象中, 这样就矛盾了: 都没有生成对象, 哪有什么虚函数表指针呢?

那么问题又来了,析构函数可以是虚函数吗?
答:可以
把基类析构函数定义为虚函数,在调用析构函数时,会根据指向的对象类型到它的虚函数表中找到对应的虚函数,此时找到的是派生类的析构函数,因此调用该析构函数;而调用派生类析构函数之后会再调用基类的析构函数,因此不会导致内存泄漏。

构造函数可以是虚函数吗?不看看你就亏大了相关推荐

  1. C# 构造函数中调用虚函数

    C# 构造函数中调用虚函数 using System; using System.Diagnostics; using System.Text; using System.Collections; u ...

  2. C++类的构造函数不能为虚函数的原因

    1 C++类的对象构造的时候,首先申请一片内存,然后调用构造函数进行初始化: 我们知道,存在虚函数的话,也会存在一个虚函数表vtable,而虚函数表示在什么时候产生的呢,当然是在调用构造函数之后产生的 ...

  3. 构造函数不能为虚函数

    2019独角兽企业重金招聘Python工程师标准>>> 1,从存储空间角度 虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的.问题出来了,如 ...

  4. 为什么构造函数不能是虚函数

    为什么构造函数不能是虚函数 从存储空间角度看,使用虚函数时,系统要有一定的空间开销,当一个类带有虚函数时,编译系统会为该类构造一个虚函数表(virtual function table),他是一个指针 ...

  5. 为什么C++构造函数不能是虚函数

    这是一个"鸡生蛋还是蛋生鸡"的问题. 首先我们要明白,虚函数是如何调用的.如果一个类有虚函数,那么必然对应一个虚函数表vtable,这个虚函数表的指针指向的是虚函数的地址.当一个基 ...

  6. C++中为何构造函数不可是虚函数,而析构函数可以?

    构造函数不可以是虚函数: 从实现上看,虚函数表在构造函数调用后才建立,因而构造函数不可能成为虚函数 从实际含义上看,在调用构造函数时还不能确定对象的真实类型(因为子类会调父类的构造函数):而且构造函数 ...

  7. 面试准备每日五题:C++(七)——左值右值、面向对象、四种cast转换、拷贝构造函数赋值、虚函数多态

    文章目录 一. 什么是右值引用,跟左值又有什么区别? 二. 面向对象的三大特征 三. c++中四种cast转换 四.拷贝构造函数和赋值运算符的认识 五. 对虚函数和多态的理解 一. 什么是右值引用,跟 ...

  8. 构造函数不能为虚/重载函数总结

    构造函数不能为虚/重载函数总结 作为一个类,他最基础的成员函数就要数构造函数了.这里我们先探讨一下构造函数为什么不能是虚函数. 在解决这个问题之前,要先明白类中函数的调用方式.一个类的函数共用一个函数 ...

  9. C++中最好不要在构造函数和析构函数中调用虚函数!!!

    1.最好不要在基类和派生类的构造和析构函数中调用虚函数,不会出现多态性 实例如下: #include "iostream"using namespace std;class Bas ...

最新文章

  1. android源码下载方法 批量下载 基于windows os
  2. c++顺序容器vector用法
  3. 修改VS2017新建类模板文件添加注释
  4. Android Studio检测内存泄露和性能
  5. Spring IOC 容器源码分析 - 创建原始 bean 对象
  6. linux下使用find xargs grep查找文件及文件内容
  7. BTS3410G参数
  8. spark-sql执行时报错:
  9. BZOJ1821 [JSOI2010]Group 部落划分 Group Kruskal
  10. 留恋 nyoj 854
  11. 理解关联容器“map”的关键点
  12. [算法笔记]分块算法从入门到TLE
  13. vue 扁平化_以vue+TreeSelect为例,如何将扁平数据转为tree形数据
  14. 微软ReportViewer(rdlc)发布时所需要的动态库(vs2010)
  15. adb脚本选择语句_Python开发:王者荣耀自动刷金币脚本
  16. nginx强制下载txt等文件
  17. kaggle注册没有验证码
  18. jmeter性能测试面试题二【多测师_王sir】
  19. linux中硬链接可以跨分区呀,linux中硬链接与软链接
  20. 跟着Vam一起学习Typescript(第一期)

热门文章

  1. 解决eclipse的 Invalid project description. overlaps the location of another project: 问题
  2. 丢掉职场中的四个幻想
  3. 【FPGA实验】VGA显示
  4. Tensorflow实战之Python基础
  5. 足球机器人守门员 类似梅西足球守门员机器人
  6. 卸载金山猎豹免费WIfi后,上不了网的解决办法
  7. UE4中蓝图实现小地图——雷达图篇
  8. UE4-(蓝图)第一百课 用.csv格式文件作为配置文件并获取、使用数据
  9. 使用tensorflow和densenet神经网路实现语谱图声纹识别,即说话人识别。
  10. 3dsmax常用操作(持续更新)