C++编译器合成Default Constructor的4种情况
笔记C++编译器为编译器需要合成Default Constructor的4种情况。
1,Class A内含Class B对象,Class A没有Default Constructor时会在编译时合成Default Constructor
在编译期间这个Default Constructor会插入调用Class B的Default Constructor的代码 ,如:
class B{
public :
B(){}
};
class A
{
public:
B bb ;
/*
A()
{
bb.B::B();//合成可以调用bb的构造函数的代码
}
*/
};
2,派生类的基类带有默认构造函数,而派生类无显示默认构造函数,编译器会合成派生类的默认构造函数并插入调用按声明顺序的基类的构造函数。
3,当类带有virtual function时,无显示构造函数,会合成默认构造函数。编译器会产生virtual table,里面是该class的virtual function的地址,并为每个实例化对象合成一个指向该virtual table的指针。
4,菱形继承时,
Base
/ \
child1 child2
\ /
Derived child* virtual 继承 Base,Derived 没有显示构造函数时,编译器会为Derived合成默认构造函数。会产生一个指向Base的指针。
* 并不是每个没有显示构造函数的类编译器都会为其合成默认构造函数,只有当默认构造函数有一定用处时,才会为编译所需合成Default Constructor
* 编译器合成的默认构造函数只为有用而合成,对于class 的 data member不会初始化,初始化工作只是程序员的事情。
C++编译器合成Default Constructor的4种情况的更多相关文章
- 构造函数语义学之Default Constructor构建操作
一.Default Constructor的构建操作 首先大家要走出两个误区: 1).任何class如果没有定义default constructor,就会被合成一个来. 2).便以其合成出来的def ...
- C++关于编译器合成的默认构造函数
有两个常见的误解: 1.任何类如果没有定义默认构造函数,就会被合成出一个来. 2.编译器合成的默认构造函数会显式地设定类内每一个数据成员的默认值. 对于第一个误解,并不是任何类在没有显式定义默认构造函 ...
- Default Constructor的构造操作
Default Constructor的构造操作 C++ Annotated Reference Manual书中的Section 12.1说过:default constructor 只有在编译器需 ...
- C++对象模型(一):The Semantics of Constructors The Default Constructor (默认构造函数什么时候会被创建出来)
本文是 Inside The C++ Object Model, Chapter 2的部分读书笔记. C++ Annotated Reference Manual中明确告诉我们: default co ...
- C++对象模型——Default Constructor的建构操作(第二章)
第2章 构造函数语意学 (The Semantics of Constructor) 关于C++,最常听到的一个抱怨就是,编译器背着程序猿做了太多事情.Conversion运算符就是最常被引用的 ...
- 构造函数语义学——Default Constructor篇
构造函数语义学--Default Constructor 篇 这一章原书主要分析了:编译器关于对象构造过程的干涉,即在对象构造这个过程中,编译器到底在背后做了什么 这一章的重点在于 default c ...
- The Semantics of Constructors: The Default Constructor (默认构造函数什么时候会被创建出来)
本文是 Inside The C++ Object Model, Chapter 2的部分读书笔记. C++ Annotated Reference Manual中明确告诉我们: default co ...
- 深度探索C++对象模型之第二章:构造函数语意学之Default constructor的构造操作
C++新手一般由两个常见的误解: 如果任何class没有定义默认构造函数(default constructor),编译器就会合成一个来. 编译器合成的的default constructor会显示的 ...
- 错误:Implicit super constructor xx() is undefined for default constructor. Must define an explicit constructor
错误:Implicit super constructor xx() is undefined for default constructor. Must define an explicit con ...
随机推荐
- 升级OpenSSH详细步骤
由于系统扫描到OpenSSH版本太低,所以需要将其升级到高版本.网上搜罗数个文章,都多多少少有点疏漏.加上自己之前没升级过SSH,参考好几个文章查缺补漏才升级成功,着实废了不少劲儿.所以综合一下前辈们 ...
- iOS 更好用的打Log方式-显示文件名、行数
单纯的NSLog方式打出的Log没有显示打印语句所在的文件名和行数,下面这种做法会很实用: #ifdef DEBUG # define DLog(fmt, ...) NSLog((@"%s ...
- (转)关闭WordPress自动加载的Open Sans字体,总是连接googleapi.com,导致打开wordpress很慢
转自http://www.xuanfengge.com/turn-off-automatic-loading-wordpress-open-sans-fonts.html 一.'在网上搜了一番,有四种 ...
- BABOK - 企业分析(Enterprise Analysis)
BABOK - 企业分析(Enterprise Analysis)概要 发表于2013年10月9日由周金根 描述 企业分析描述我们如何捕捉.提炼并明晰业务需要,并定义一个可能实现这些业务需要的一个方案 ...
- Look and say numbers
地址:http://www.codewars.com/kata/53ea07c9247bc3fcaa00084d/train/python There exists a sequence of num ...
- 在JBoss中部署GeoServer
GeoServer一直就不能在 JBoss应用服务器中正常部署.最近我在一个国外的论坛上找到了该问题的解决方案.以下方法经测试,可以将GeoServer 2.1.3 成功部署在 JBoss 5.0 和 ...
- nodejs保存文件的问题
从前端到那里jar包失败: 保存到本地管理机jar包md5sum上传正确的值md5sum值不相等.并上传 处理 没有错误,说明保存过程中的错误: 前面是base64然后转码后jar包内容放进reque ...
- careercup-数组和字符串1.6
1.6 给定一幅由N*N矩阵表示的如下,其中每个像素的大小为4个字节,编写一个方法,将图像旋转90度.不占用额外内存空间能否做到? 类似leetcode:Rotate Image 思路: 我们这里以逆 ...
- hadoop错误org.apache.hadoop.mapred.TaskAttemptListenerImpl Progress of TaskAttempt
错误: org.apache.hadoop.mapred.TaskAttemptListenerImpl: Progress of TaskAttempt 原因: 错误很明显,磁盘空间不足,但郁闷的是 ...
- Response乱码的解决方法
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletExcept ...