C++ 编译器生成默认构造函数的四种情况
编译器什么时候 会生成默认构造函数
C++ 编译器生成默认构造函数的四种情况
c++新手的两个误解:
1)任何类如果没有定义默认构造函数,就会被合成出来一个。
2)编译器合成出来的默认构造函数会显式设定“类内每一个数据成员的默认值”。
上述两种说法都是错误的!
C++ 编译器生成默认构造函数的四种情况:
1)类成员中有成员是类对象,并且该成员的类含有默认构造函数。那么C++编译器会给这个类也生成一个默认构造函数,用来调用其成员对象的构造函数,完成该成员的初始化构造。如果这个成员的类没有给出默认构造函数,那么C++编译器也不会生成该类的默认构造函数。
2)这个类的基类有默认构造函数。那么C++编译器也会帮你生成该派生类的默认构造函数,以调用基类的默认构造函数,完成基类的初始化。如果基类没有提供这个默认构造的函数,那么编译器也不会为派生类生成默认的构造函数(这里包括两层意思,第一,基类没有任何形式构造函数;第二,基类存在其他形式的非默认构造函数,这种类型就是编译不过的,道理很明显)。
3)类中存在虚函数(新定义或继承而得到)。那么C++编译器会为你生成默认构造函数,在编译期生成虚表和虚表指针。
4)存在虚基类(有直接虚拟基类或继承链上有虚基类)。那么C++编译器会为你生成默认构造函数,以初始化虚基类表(vbtable)。
这四种情况之外,且没有声明任何constructor的类,可以说它有无用的构造函数,但实际上它根本就不会被构建出来。
C++ 编译器生成默认构造函数的四种情况相关推荐
- UE4 C++入门之路4-PostInitProperties函数详解(设置属性默认值的四种方法)
PostInitProperties函数详解 前言 设置属性默认值的四种方法 一 声明时赋值 二 构造函数赋值 三 构造函数初始化列表 四 PostInitProperties 前言 也许在工作或者学 ...
- js和php能生成一样的随机数_JavaScript_JS生成某个范围的随机数【四种情况详解】,前言:
JS没有现成的函数,能 - phpStudy...
JS生成某个范围的随机数[四种情况详解] 前言: JS没有现成的函数,能够直接生成指定范围的随机数. 但是它有个函数:Math.random() 这个函数可以生成 [0,1) 的一个随机数. 利用它 ...
- 【Kotlin】Kotlin 类的继承 二 ( 属性覆盖 | 属性覆盖的四种情况 | 常量 / 变量 属性覆盖 | 子类初始化与属性覆盖 )
文章目录 I . 属性覆盖基本方式 II . 属性覆盖的四种情况 III . 常量 ( val ) / 变量 ( var ) 属性覆盖 IV . 子类初始化时考虑覆盖属性的使用 I . 属性覆盖基本方 ...
- 【组合数学】递推方程 ( 常系数线性非齐次递推方程 的 非齐次部分是 多项式 与 指数 组合方式 | 通解的四种情况 )
文章目录 一.常系数线性非齐次递推方程 的 非齐次部分是 多项式 与 指数 组合方式 二.递推方程通解的四种情况 一.常系数线性非齐次递推方程 的 非齐次部分是 多项式 与 指数 组合方式 如果 &q ...
- 2021-10-11 ! AVL树 及其平衡调整 四种情况 恋上数据结构笔记 (考过)
b站有个up讲的很详细 https://www.bilibili.com/video/BV1xE411h7dd?from=search&seid=11383601726930144190&am ...
- js内存泄漏常见的四种情况(From LeuisKen)
本文主要选取了4 Types of Memory Leaks in JavaScript and How to Get Rid Of Them 这篇文章中的一小部分来说明一下js中产生内存泄漏的常见情 ...
- [摘译]js内存泄漏常见的四种情况
本文主要选取了4 Types of Memory Leaks in JavaScript and How to Get Rid Of Them 这篇文章中的一小部分来说明一下js中产生内存泄漏的常见情 ...
- 海康服务器装win7系统,详解win7旗舰版系统必须重装的四种情况
在使用windows7操作系统过程中,难免会遇到一些故障,比如系统中毒或者无法进入系统等这些情况,可是很多人遇到这些问题并不会想到要重装系统,其实重装的方法很简单,而且也是可以彻底解决那些问题的最佳方 ...
- 加ing形式的单词有哪些_英语单词后面加ing的有哪四种情况?
英语单词后面加ing的有哪四种情况? 234游戏网友 提出于 2019-07-22 19:43:05 RT,我想知道英语单词后面加ing的有哪四种情况? 一.做主语 二.作谓语,be doing 三. ...
- 四种情况会造成内存的泄漏:
以下四种情况会造成内存的泄漏: 意外的全局变量: 由于使用未声明的变量,而意外的创建了一个全局变量,而使这个变量一直留在内存中无法被回收. 被遗忘的计时器或回调函数: 设置了 setInterval ...
最新文章
- 再次证明消息四元组的处理顺序。
- bitcoin cash的地址格式 cash addr 简介
- 【操作系统】使用循环创建线程,一个手残导致的bug
- git配置全局用户名和密码_还在手动打包,手动传jar包?那你确实应该学一下jekins配置了...
- java经典面试题目
- 几行代码,轻松带你实现Java生成二维码功能!
- JVM Java内存区域 与 内存溢出 (系列号1)
- django settings 定义的变量不存在_Django基础框架搭建
- springboot 配置文件乱码的问题
- Sequelize 大于_间接效应值大于1是正常的吗?Q群答疑20200405
- 比较复杂的sql面试题
- 磁记录材料和计算机0101,信息磁性功能材料
- Oracle OCA、OCP、OCM认证科目及考试内容
- NVIDIA Jetson Xavier NX 刷机方法(sdk manager)
- 计算机网络七年级教学设计,初中七年级信息技术《计算机网络和因特网》教学设计.docx...
- gnuplot画图点线设置
- 基于Vue+ElementUI的省市区地址选择通用组件
- word中图片不显示的解决办法
- 2022年Java面试心得,如何设计一个优雅的RESTFUL的接口
- 人工变量法的matlab编程运算,单纯形法程序