编译器什么时候 会生成默认构造函数

C++ 编译器生成默认构造函数的四种情况

c++新手的两个误解:
1)任何类如果没有定义默认构造函数,就会被合成出来一个。
2)编译器合成出来的默认构造函数会显式设定“类内每一个数据成员的默认值”。
上述两种说法都是错误的!

C++ 编译器生成默认构造函数的四种情况:
1)类成员中有成员是类对象,并且该成员的类含有默认构造函数。那么C++编译器会给这个类也生成一个默认构造函数,用来调用其成员对象的构造函数,完成该成员的初始化构造。如果这个成员的类没有给出默认构造函数,那么C++编译器也不会生成该类的默认构造函数。
2)这个类的基类有默认构造函数。那么C++编译器也会帮你生成该派生类的默认构造函数,以调用基类的默认构造函数,完成基类的初始化。如果基类没有提供这个默认构造的函数,那么编译器也不会为派生类生成默认的构造函数(这里包括两层意思,第一,基类没有任何形式构造函数;第二,基类存在其他形式的非默认构造函数,这种类型就是编译不过的,道理很明显)。
3)类中存在虚函数(新定义或继承而得到)。那么C++编译器会为你生成默认构造函数,在编译期生成虚表和虚表指针。
4)存在虚基类(有直接虚拟基类或继承链上有虚基类)。那么C++编译器会为你生成默认构造函数,以初始化虚基类表(vbtable)。

这四种情况之外,且没有声明任何constructor的类,可以说它有无用的构造函数,但实际上它根本就不会被构建出来。

C++ 编译器生成默认构造函数的四种情况相关推荐

  1. UE4 C++入门之路4-PostInitProperties函数详解(设置属性默认值的四种方法)

    PostInitProperties函数详解 前言 设置属性默认值的四种方法 一 声明时赋值 二 构造函数赋值 三 构造函数初始化列表 四 PostInitProperties 前言 也许在工作或者学 ...

  2. js和php能生成一样的随机数_JavaScript_JS生成某个范围的随机数【四种情况详解】,前言: JS没有现成的函数,能 - phpStudy...

    JS生成某个范围的随机数[四种情况详解] 前言: JS没有现成的函数,能够直接生成指定范围的随机数. 但是它有个函数:Math.random()  这个函数可以生成 [0,1) 的一个随机数. 利用它 ...

  3. 【Kotlin】Kotlin 类的继承 二 ( 属性覆盖 | 属性覆盖的四种情况 | 常量 / 变量 属性覆盖 | 子类初始化与属性覆盖 )

    文章目录 I . 属性覆盖基本方式 II . 属性覆盖的四种情况 III . 常量 ( val ) / 变量 ( var ) 属性覆盖 IV . 子类初始化时考虑覆盖属性的使用 I . 属性覆盖基本方 ...

  4. 【组合数学】递推方程 ( 常系数线性非齐次递推方程 的 非齐次部分是 多项式 与 指数 组合方式 | 通解的四种情况 )

    文章目录 一.常系数线性非齐次递推方程 的 非齐次部分是 多项式 与 指数 组合方式 二.递推方程通解的四种情况 一.常系数线性非齐次递推方程 的 非齐次部分是 多项式 与 指数 组合方式 如果 &q ...

  5. 2021-10-11 ! AVL树 及其平衡调整 四种情况 恋上数据结构笔记 (考过)

    b站有个up讲的很详细 https://www.bilibili.com/video/BV1xE411h7dd?from=search&seid=11383601726930144190&am ...

  6. js内存泄漏常见的四种情况(From LeuisKen)

    本文主要选取了4 Types of Memory Leaks in JavaScript and How to Get Rid Of Them 这篇文章中的一小部分来说明一下js中产生内存泄漏的常见情 ...

  7. [摘译]js内存泄漏常见的四种情况

    本文主要选取了4 Types of Memory Leaks in JavaScript and How to Get Rid Of Them 这篇文章中的一小部分来说明一下js中产生内存泄漏的常见情 ...

  8. 海康服务器装win7系统,详解win7旗舰版系统必须重装的四种情况

    在使用windows7操作系统过程中,难免会遇到一些故障,比如系统中毒或者无法进入系统等这些情况,可是很多人遇到这些问题并不会想到要重装系统,其实重装的方法很简单,而且也是可以彻底解决那些问题的最佳方 ...

  9. 加ing形式的单词有哪些_英语单词后面加ing的有哪四种情况?

    英语单词后面加ing的有哪四种情况? 234游戏网友 提出于 2019-07-22 19:43:05 RT,我想知道英语单词后面加ing的有哪四种情况? 一.做主语 二.作谓语,be doing 三. ...

  10. 四种情况会造成内存的泄漏:

    以下四种情况会造成内存的泄漏: 意外的全局变量: 由于使用未声明的变量,而意外的创建了一个全局变量,而使这个变量一直留在内存中无法被回收. 被遗忘的计时器或回调函数: 设置了 setInterval ...

最新文章

  1. 再次证明消息四元组的处理顺序。
  2. bitcoin cash的地址格式 cash addr 简介
  3. 【操作系统】使用循环创建线程,一个手残导致的bug
  4. git配置全局用户名和密码_还在手动打包,手动传jar包?那你确实应该学一下jekins配置了...
  5. java经典面试题目
  6. 几行代码,轻松带你实现Java生成二维码功能!
  7. JVM Java内存区域 与 内存溢出 (系列号1)
  8. django settings 定义的变量不存在_Django基础框架搭建
  9. springboot 配置文件乱码的问题
  10. Sequelize 大于_间接效应值大于1是正常的吗?Q群答疑20200405
  11. 比较复杂的sql面试题
  12. 磁记录材料和计算机0101,信息磁性功能材料
  13. Oracle OCA、OCP、OCM认证科目及考试内容
  14. NVIDIA Jetson Xavier NX 刷机方法(sdk manager)
  15. 计算机网络七年级教学设计,初中七年级信息技术《计算机网络和因特网》教学设计.docx...
  16. gnuplot画图点线设置
  17. 基于Vue+ElementUI的省市区地址选择通用组件
  18. word中图片不显示的解决办法
  19. 2022年Java面试心得,如何设计一个优雅的RESTFUL的接口
  20. 人工变量法的matlab编程运算,单纯形法程序

热门文章

  1. 开源的物联网技术平台thingsboard安装测试及使用步骤
  2. 暖心!阿里安全白帽挖漏洞做公益 连收2462封山区小孩感谢信
  3. 07 SQL优化技术
  4. Failed to push selection: Read-only file system
  5. POJ-3621 Sightseeing Cows 01分数(参数搜索)规划问题-最优比率环
  6. CFileFind的文件名大小写问题
  7. 对话框的数据交换--MFC深入浅出
  8. css3弹性盒子+小程序布局
  9. 微信小程序的组件 component开发,提高效率第三篇
  10. 费波纳奇数c语言,费波纳切数列用C语言怎么编程